最近给本站接入 CDN 加速之后,我遇到了一个非常恶心人的问题:所有评论、网站访问日志、后台登录记录,全部显示成了 CDN 节点 IP,不再显示访客真实 IP。
一开始我以为是 CDN 故障,排查之后才明白,这其实是正常机制。这篇文章我把原因、原理和一次性永久解决的方法完整记录下来,方便以后回看,也希望能帮到遇到同样问题的朋友。
接入 CDN 后 IP 错乱的原因
没开 CDN 时:
- 用户 → 直接访问源站
- 服务器拿到的
REMOTE_ADDR= 用户真实 IP
开启 CDN(EdgeOne / Cloudflare / 所有 CDN)后:
- 用户 → CDN 节点 → 我的源站服务器
- 服务器看到的来访 IP = CDN 节点 IP
而真实访客 IP,CDN 会放在 HTTP 请求头中传递给源站:
- EdgeOne:
X-Forwarded-For - Cloudflare:
X-Forwarded-For/CF-Connecting-IP
但 Nginx 和 WordPress 默认不会读取这个头,所以导致全站 IP 全部错乱。
最终解决方案(Nginx 真实 IP 配置)
我只需要在站点 Nginx 配置中加入三行代码,全站就自动恢复了真实 IP,包括:评论 IP、后台日志、登录 IP、防火墙记录、所有插件统计 IP。
编辑站点 Nginx 配置,在 server{} 内部添加:
set_real_ip_from 0.0.0.0/0;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
保存后重载 Nginx:
nginx -s reload
代码作用解释
set_real_ip_from:信任 CDN 传过来的 IP 头real_ip_header X-Forwarded-For:使用 CDN 传递的真实访客 IPreal_ip_recursive on:自动过滤多层代理,取最真实客户端 IP
配置完成后,WordPress 无需任何插件、无需改代码、无需改主题,自动恢复真实 IP。









