启用百度CDN后EMLOG无法正常评论者IP
最近百度云赠送了我1TB的CDN流量,于是我就切换到了这个CDN
在昨晚,我发现评论不能正常获取到我的IP
就以为百度CDN不支持X-Forwarded-For便去官网查找
找到了Client IP 和 Real IP
根据专业文档解释Client IP返回的是真实访问者的IP
我就在EMLOG的核心代码中修改了下,发现虽然不显示本地IP,但是却显示百度CDN的回源IP
于是又仔细的检查下,发现返回的字段不是CLIENT_IP而是True-Client-Ip
修改后又开始返回本地保留IP了
----分割线----
/** * 获取用户ip地址 */ function getIp() { $ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : ''; if(isset($_SERVER['HTTP_TRUE_CLIENT_IP'])){ $list = explode(',', $_SERVER['HTTP_TRUE_CLIENT_IP']); $ip = $list[0]; } if (!ip2long($ip)) { $ip = ''; } return $ip; }
上面这段才是正确的获取CLIENT-IP字段的代码
直接在/include/lib/function.base.php找到修改即可(CDN必须支持CLIENT_IP这个响应头,若不支持,请按照http://bjdxwx.com/emlog/197.html)
----分割线----
发现这种情况后,便找了一个可以输出HTTP响应头的PHP代码
<?php if (!function_exists('getallheaders')) { function getallheaders() { foreach ($_SERVER as $name => $value) { if (substr($name, 0, 5) == 'HTTP_') { $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; } } return $headers; } } ?> <?php print_r(getallheaders()); ?>
创建了一个名为test.php的文件直接访问
可以看到,在CLIENT-IP/X-REAL-IP/X-FORWARDE-FOR这三个存储IP的响应头中都没有我的IP
我就判断为DNS劫持导致的
PING了下域名
202.150.19.35 ?
查询下归属地后发现是陕西广电。。。
再在百度CDN查询下后发现是他们的节点
就想到可能是这个节点的问题,然后随便拉个一个百度CDN的节点重定向了下
好了,问题出现在这个节点,我就去找百度CDN客服
真无语了
小徐 》原创,转载请保留文章出处。 本文链接:启用百度CDN后EMLOG无法正常评论者IP http://bjdxwx.com/zqzb/372.html
版权声明:若无特殊注明,本文皆为《 正文到此结束
发表吐槽
你肿么看?
既然没有吐槽,那就赶紧抢沙发吧!