Dragon

Matomo 使用 CDN 后无法正确获取访客 Client 真实 IP

2022-11-25 01:03 61 抢沙发 阿峰博客

背景

最近在查看 matomo 后台访问日志时发现Matomo后台显示的访客IP和实际的Client IP不一致。

Matomo 使用 CDN 后无法正确获取访客 Client 真实 IP插图

检查

通过直接访问该 IP,发现该 IP 竟然会返回 404 状态码,然后去腾讯云CDN控制台使用 IP 归属查询工具,发现该 IP 是腾讯云CDN节点 IP。为了保证统计网站访问速度,所以使用了CDN服务。

Matomo 使用 CDN 后无法正确获取访客 Client 真实 IP插图1

前往腾讯云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.

Matomo 使用 CDN 后无法正确获取访客 Client 真实 IP插图2

从答案得知,需要修改 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。

Matomo 使用 CDN 后无法正确获取访客 Client 真实 IP插图3

再次测试

此时测试 Client IP 获取与本机 IP 一致,问题解决!

Matomo 使用 CDN 后无法正确获取访客 Client 真实 IP插图4

Matomo 使用 CDN 后无法正确获取访客 Client 真实 IP插图5

「点点赞赏,手留余香」

还没有人赞赏,快来当第一个赞赏的人吧!

阿峰博客给阿峰博客打赏
×
予人玫瑰,手有余香
  • 1
  • 5
  • 10
  • 20
  • 50
1
支付

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

2022-11-04

2022-11-04

发表评论

本站已严格贯彻落实《互联网跟帖评论服务管理规定》 注册账号需绑定并验证手机号真实性
  • 您可享受35%的返佣现金哦~