Typecho 启用 CloudFlare CDN 后获取真实 IP
Typecho 提交评论后会保存评论者的 IP,如果启用了 CloudFlare CDN,默认获取的 IP 也是 CloudFlare 的 IP。
下面是 Typecho 的评论管理:

其中的 162.158.178.147 就是 CloudFlare 的 IP。
CloudFlare 会把用户真实 IP 放到请求头的 HTTP_CF_CONNECTING_IP ,PHP 可以通过 $_SERVER['HTTP_CF_CONNECTING_IP'] 获取用户真实 IP。
只需要修改一下文件,让 Typecho 使用 $_SERVER['HTTP_CF_CONNECTING_IP'] 就可以。
不需要修改源码,可以修改 Typecho 根目录的 config.inc.php ,在开头加入:
if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) {
define('__TYPECHO_IP_SOURCE__', 'CF-Connecting-IP');
}上面会检查 $_SERVER['HTTP_CF_CONNECTING_IP'] 是否存在,也就是检查是否启用了 CloudFlare CDN,如果启用就把用户的真实 IP 传给 Typecho。
$_SERVER['REMOTE_ADDR'] 是 PHP 获取 IP 的方式,Typecho 不会直接读取 $_SERVER['REMOTE_ADDR'],所以不能直接覆盖 $_SERVER['REMOTE_ADDR'] 。
按照上面的方式修改后就可以获取用户真实 IP,就算禁用了 CloudFlare CDN,也能获取用户 IP,无需再次修改。
版权声明:本文为原创文章,版权归 Changbin's Blog 所有,允许非商业转载,转载请用链接注明出处。
本文地址:https://www.misterma.com/archives/968/
如果对本文有什么问题或疑问都可以在评论区留言,我看到后会尽量解答。