概述
网站评论区增加了用户Ip后,就没怎么关注了,直到这几天,回复留言时,发现Ip莫名的显示:湖南?我明明在成都的嘛,偏差这么大吗?赶紧翻阅了我近期的几条留言,都不正确,要么在湖南,要么就在陕西咸阳?
查阅了网上的解释,那都是cdn搞的鬼,显示的是cdn节点的ip,网上当然给了解决方案:
在配置文件 (/config.inc.php) 中加入如下配置。
/** 定义 IP 来源 */
define('__TYPECHO_IP_SOURCE__', 'HTTP_X_FORWARDED_FOR');
或者是:
//防止 CDN 造成无法获取客户真实 IP 地址
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$list = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
$_SERVER['REMOTE_ADDR'] = $list[0];
}
但是,我参考并且照做了,结果没有用。
不过,经过了好几个小时的折腾,其中这篇文章: Typecho 使用 CDN 后获取访客真 IP 给了我较大的帮助,当然,也引发了新问题,就是作者可以在服务器打印内容找到ip:HTTP_CF_CONNECTING_IP
但是我打印出来没有啊。只能找到一个腾讯云的[HTTP_X_FORWARD_PORT] => 3944, 但看不到HTTP_X_FORWARD的地址。
几乎要崩溃,最终还是联系了腾讯云支持工单,来回沟通,加上自行摸索,总算搞定,特此分享出来。
查询自己的ip
随便一个ip查询网站,查询自己的当前ip信息,看看是否正确,原作者采用的是 这里 ,那就用这个吧,只要和你的位置信息对的上,都行。
打印自己的服务器信息
新建一个 PHP 文件,输入以下内容
PHP
<?php
print_r($_SERVER);
?>
上传到服务器,然后通过浏览器访问,得到一堆内容。
比对IP
看看这对内容中,有没有自己的真是Ip,有的话,恭喜你,省事了,找出Ip 对应的代码,比如原作者找出的是:HTTP_CF_CONNECTING_IP
修改config.inc.php
然后在在配置文件 (/config.inc.php) 中加入如下配置。
/** 定义 IP 来源 */
define('__TYPECHO_IP_SOURCE__', 'CF_CONNECTING_IP');//去掉HTTP_
没有找出ip
我的是腾讯云cdn,请到这里,照抄,别问我是啥意思,我也不懂,抄就是了:
再次对比ip
不出意外的话,你应该是能找到一致的ip了,对应的代码是不是:HTTP_X_FORWARD_FOR
然后修改config.inc.php
/** 定义 IP 来源 */
define('__TYPECHO_IP_SOURCE__', 'X_FORWARD_FOR');//去掉HTTP_
搞定,
GOOD LUCK!