源站日志里全是同一个 IP?聊聊 X-Forwarded-For 与真实访客 IP 还原
为什么源站"看见"的只剩几个 IP
访客接了 CDN 之后,链路变成"访客 → 边缘节点 → 源站"两段:TCP 连接的对手方是边缘节点,源站防火墙看到的自然全是节点地址。日志里 IP 高度集中是正常现象——真正的问题在于:网站程序若还拿"连接来源"当访客 IP,一切就都错了。
两个头部装着真访客
边缘节点转发请求时,会把真实访客信息放进头部:
- X-Real-IP:最接近客户端的单一真实来源地址;
- X-Forwarded-For:逗号分隔的完整代理链,第一个是访客 IP,后面是每一跳。
解析铁律:只信任来自可信代理的头部。若站点同时直接暴露公网,X-Forwarded-For 就成了用户可以随意填写的字段——把评论 IP、地域统计甚至封禁决策交给它,等于把白名单交给骗子。
三步修复方案
- 应用层:Nginx 的 realip 模块、各类 CMS 的"信任代理"配置,都支持"当请求来自节点 IP 段时改从头部取访客 IP",按程序文档开启即可;
- 防御层:源站防火墙与安全组除了"按真实 IP 判定",还要把边缘节点 IP 段放行进业务端口——否则 CC 封禁会封在节点头上、源站侧永远"人人正常",甚至把自家节点拉黑造成全站 502;
- 审计层:修复后抽查后台"最近登录 IP"、评论归属与日志中心访问样本,两边应当吻合。
顺带一提的限速
访客 IP 还原正确后,业务层的限速、地域风控、防薅规则才会自动"复活"——这正是 悠梦庭高防CDN 日志中心把每行访问的真实来源与耗时做成第一公民数据的原因:先有对的数据,才谈得上对的安全。
更多接入运营经验,可翻 资讯中心。