背景
最近在查看 matomo 后台访问日志时发现Matomo后台显示的访客IP和实际的Client IP不一致。
检查
通过直接访问该IP,发现该IP竟然会返回 404 状态码,然后去腾讯云CDN控制台使用IP归属查询工具,发现该IP是腾讯云的CDN节点IP。为了保证统计网站访问速度,所以使用了CDN服务。
前往腾讯云CDN控制台查看该域名的回源设置,发现已经设置了Tencent-Acceleration-Domain-Name参数,Tencent-Acceleration-Domain-Name 参数会自动携带X-Forwarded-For and X-Forwarded-Proto参数回源。
理论来说,配置该参数之后可以正常获取Client IP信息,但是在 matomo 并未生效。
在谷歌搜索一番找到 Stack Overflow 网站的相关问答结果
问答地址:https://serverfault.com/questions/331531/nginx-set-real-ip-from-aws-elb-load-balancer-address
答案如下:
The realip_module states that in case of X-Forwarded-For, this module uses the last ip address in the X-Forwarded-For header for replacement. This module will not work when only real_ip_header
and set_real_ip_form
are set. This is because this module will use a proxy IP address instead of a client IP. To solve this real_ip_recursive
directive should be enabled.
从答案得知,需要修改 Nginx 主配置文件,并添加real_ip_recursive指令。
real_ip_header X-Forwarded-For;
real_ip_recursive on;
set_real_ip_from 0.0.0.0/0;
set_real_ip_from ::/0;
set_real_ip_from需要使用CIDR表示法,0.0.0.0/0代表匹配所有 IPv4 地址,::/0或者0::0/0代表匹配所有 IPv6 地址。
将以上配置内容添加至 Nginx 主配置文件下的http字段内保存并重启 Nginx 即可正常获取Client IP。
再次测试
还没有人赞赏,快来当第一个赞赏的人吧!
![阿峰博客](https://www.afengblog.com/wp-content/uploads/avatars/79941fbcd54b93e79588a57ef3002ee3.png)
- 1¥
- 5¥
- 10¥
- 20¥
- 50¥
本文为原创文章,版权归阿峰博客所有,欢迎分享本文,转载请保留出处!