背景
最近在查看 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 网站的相关问答结果
答案如下:
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
andset_real_ip_form
are set. This is because this module will use a proxy IP address instead of a client IP. To solve thisreal_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。
再次测试
此时测试Client IP 获取与本机 IP 一致,问题解决!
原文地址:https://www.afengblog.com/matomo-cdn-obtains-the-users-real-ip.html
发表回复
要发表评论,您必须先登录。