0x01 前言
我的Wordpress是经过多重代理才到达后端的PHP,在网站刚上线的时候,在网站后台或日志中看到的所有来源日志都是源自IP:127.0.0.1,这肯定是不正确的,也不利于统计分析。
0x02 解决
我的前端使用nginx,nignx后面跟着apache,最后才是PHP。为了便捷性,我使用以下header进行真实用户IP的传递:
X-Forwarded-For
首先设置nginx,在server段中添加以下内容并重新加载nginx:
#添加以下内容 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #重新加载nginx nginx -s reload
$proxy_add_x_forwarded_for 这个变量会将所有代理的IP都包含其中,而第一个IP就是用户的真实IP,值的格式如下:
HTTP_X_FORWARDED_FOR => remote_ip,proxy1_ip, proxy2_ip,... ...
然后配置apache,如果你没有使用apache,可以跳过这一步。首先需要确认你加载了相应的模块:
LoadModule remoteip_module modules/mod_remoteip.so
然后在httpd.conf中添加以下内容并重新启动apache:
#添加以下内容 RemoteIPHeader X-Forwarded-For RemoteIPInternalProxy 127.0.0.1 #从新启动apache [root@test ~]# systemctl restart httpd.service
完成后还需要将以下内容添加至wp-config.php或主题文件中的functions.php文件中,两者取一即可:
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); $_SERVER['REMOTE_ADDR'] = $ips[0]; }
0x03 结语
完成后,一切顺利的话,访客的真实IP就可以完美地传递到后端了。