typecho,腾讯云 cdn后,获取用户真实IP,回源HTTP请求头配置

xc
xc
2024-06-18 / 0 评论 / 6 阅读 / 正在检测是否收录...

概述

网站评论区增加了用户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获取.jpg

查询自己的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,请到这里,照抄,别问我是啥意思,我也不懂,抄就是了:
回源http请求.jpg

再次对比ip

不出意外的话,你应该是能找到一致的ip了,对应的代码是不是:HTTP_X_FORWARD_FOR
然后修改config.inc.php

/** 定义 IP 来源 */
define('__TYPECHO_IP_SOURCE__', 'X_FORWARD_FOR');//去掉HTTP_

搞定,
GOOD LUCK!

0

评论 (0)

取消
使用 Typecho 建站,并搭配 joe 主题(有修改)
蜀ICP备2022005623号 川公网安备 51012202001212号
本站已运行 00000000
Copyright © 1970 ~ Xcshare All rights reserved.