VPS前后端分离使WordPress无法记录访客IP解决之法

提醒:本文最后更新于 3961 天前,文中所描述的信息可能已发生改变,请仔细核实。

最近没怎么注意,今天看了评论,发现所有评论的ip都是127.0.0.1。而且是在配置squid之后的评论如此(话说到现在都还没弄好,烦)。

因为前后端分开了,当客户端请求访问动态页面时会被前端反向代理给后端处理,所以Wordpress读到的是localhost。。。为了解决,只能让WP更智能一点,录入真实访问IP (而不是请求IP)。

解决办法,在wp-config.php 的第2行(即<?php之后),添加

if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
$list = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
$_SERVER['REMOTE_ADDR'] = $list[0];}

$_SERVER['HTTP_X_FORWARDED_FOR']$_SERVER['REMOTE_ADDR']都是用于获取客户端IP的,全局变量,因此可以直接调用。
$_SERVER['REMOTE_ADDR']是正在浏览当前页面用户的 IP 地址,由于服务器自身启用了反向代理,所以这个变量始终记录IP为127.0.0.1。
$_SERVER["HTTP_X_FORWARDED_FOR"]用于获取使用代理服务器用户的IP,但有时读取的仍然是代理服务器本身的IP。

因为X-Forwarded-For头的记录格式是:client1,proxy1,proxy2,所以在上面的代码中我们取的是第一个值。

转载请注明转自:kn007的个人博客的《VPS前后端分离使WordPress无法记录访客IP解决之法