运维前几天把piwik切换到了Nginx后端,并且服务器加了HA 代理分发,piwik主机仅负责收集数据,包括数据库读写分离,但今天看了下数据发现所有来源IP都是代理IP,因为要对接大数据组,所以抓取丢给kafka的用户ip也都是代理ip,被大数据组骚扰了两天,今天就排查了下问题。
首先是服务器
location / {
proxy_pass http://xxxx_piwik;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
##HTTP_X_REAL_IP的值是nginx得到的用户REMOTE_ADDR##
}
然后,还是获取的代理ip,说明不是Nginx后端问题。
那就查看是否为piwik代码原因,找到了piwik下core下IP.php文件,在其getIpFromHeader()方法里,发现获取ip直接$_SERVER['REMOTE_ADDR']获取的,修改代码,代码如下:
提交,结果还是获取的代理ip,说明不是piwik代码问题。
那就检查piwik的配置文件,首先是config下面的global.ini.php文件,找到了ip配置的部分,如图
尝试修改了下配置,将proxy_client_headers[] = HTTP_X_FORWARDED_FOR 前面的分号去掉,启用,但还是获取的代理ip
那就查看另外一个配置文件config.ini.php,修改该文件,如图
加上proxy_client_headers[] = HTTP_X_REAL_IP 运行,测试成功,获取到了用户的真实ip地址,大功告成!
期间还参考了阿里的文档获取客户端真实IP
此处评论已关闭