We apologize that the translated content is not provided to this page.
前言
CDN开启后无法获取客户端真实ip,只能通过header内的X-Forwarded-For获取。
因此,需要修改typecho配置。
解决方法
- 追踪
Feedback.php
内comment()
方法,得知ip获取方法为$this->request->getIp()
- 步入获取到这一段代码:
switch (true) { case defined('__TYPECHO_IP_SOURCE__') && NULL !== $this->getServer(__TYPECHO_IP_SOURCE__): list($this->_ip) = array_map('trim', explode(',', $this->getServer(__TYPECHO_IP_SOURCE__))); break; case NULL !== $this->getServer('REMOTE_ADDR'): $this->_ip = $this->getServer('REMOTE_ADDR'); break; case NULL !== $this->getServer('HTTP_CLIENT_IP'): $this->_ip = $this->getServer('HTTP_CLIENT_IP'); break; default: break; }
- 得知只要在
config.inc.php
设置常量__TYPECHO_IP_SOURCE__
即可获取://开启cloudflare真实IP define('__TYPECHO_IP_SOURCE__', 'HTTP_X_FORWARDED_FOR');
后记
见到网上天花乱坠的解决方法,比如通过$_SERVER['HTTP_X_FORWARDED_FOR']
覆盖了$_SERVER['REMOTE_ADDR']
的方式。其实道理相同,只是这个方式更为简便,设置常量即可。
123
测试
1
1