### [API网关后有多层代理,真实客户端IP怎么取?Forwarded与X-Forwarded-For](https://www.jiyueip.com/article/8091) **Published:** 2026-07-22T19:07:12 **Author:** 斑斓助理 **Excerpt:** CDN、WAF、负载均衡和API网关形成多层代理后,连接来源IP与真实客户端地址不同。本文说明Forwarded、X-Forwarded-For、可信代理列表、防伪造、IPv6、日志和限流。 当请求依次经过CDN、WAF、云负载均衡和API网关时,应用TCP连接的直接对端通常是最后一层网关。因此应用框架读取到负载均衡IP是正常的。真实客户端地址需要从受控代理写入的头部中解析,但绝不能无条件相信用户提交的`X-Forwarded-For`。 ## 多层代理中的地址变化 | 位置 | 直接连接来源 | 可能写入的信息 | | --- | --- | --- | | CDN/WAF | 客户端公网地址 | 清洗并写入客户端IP头 | | 负载均衡 | CDN或WAF出口 | 追加Forwarded/XFF或代理协议 | | API网关 | 负载均衡地址 | 再次追加代理链 | | 应用 | API网关地址 | 按可信代理规则解析 | ## 为什么X-Forwarded-For可以被伪造 它只是HTTP请求头。客户端可以直接发送任意值。如果第一层受控代理没有删除外部传入值并重新构造,恶意请求就能把伪造地址放在列表左侧。应用若机械取最左项,会污染审计、限流和安全决策。 ## 正确思路是可信代理链 应用先确认直接连接来源是否属于可信API网关。然后从代理链最右侧开始,跳过由组织明确控制的代理地址,取第一个不可信地址作为候选客户端。具体实现应使用框架的可信代理配置,不要手写简单字符串分割。 ## Forwarded与XFF有什么区别 `Forwarded`是标准化头,可包含`for`、`proto`和`host`;`X-Forwarded-For`是广泛使用的事实标准。现实环境可能同时存在。应选择基础设施明确维护的一套来源,规定覆盖与追加规则,避免两个头互相冲突。 ## X-Real-IP一定更安全吗 不一定。任何头的可靠性都取决于受控代理是否清洗外部输入并重新写入。若应用可被绕过CDN直接访问,攻击者还可以直接连接Origin并伪造头。应限制Origin只接受来自可信代理网络的连接。 ## IPv6和端口格式容易踩什么坑 标准Forwarded头中的IPv6可能带引号和方括号,XFF列表也可能包含IPv4、IPv6或无效文本。解析器应使用成熟库并验证地址格式。不要将主机和端口混为一个IP字符串,也不要因为日志系统不支持IPv6而截断。 ## Proxy Protocol什么时候使用 在TCP负载均衡场景中,Proxy Protocol可在连接层传递源地址,但发送端和接收端必须同时启用。错误地把Proxy Protocol流量发给普通HTTP服务会导致请求损坏。它同样依赖可信网络,不能从公网任意接受。 ## 真实IP用于限流有哪些风险 家庭、公司、移动网络和CGNAT会让多个用户共享地址;移动切网又会频繁变化。IP限流适合做一层风险控制,不应成为唯一身份。对登录、支付或敏感API,应结合账号、设备、Token、行为和业务键。 CGNAT与共享公网IP可参考[公网IP共享与CGNAT判断](https://www.jiyueip.com/article/7308)。 ## 日志应同时记录哪些字段 - 应用看到的直接对端地址; - 原始代理头的受控摘要; - 解析后的候选客户端地址; - 命中的可信代理规则版本; - 请求ID、网关与服务实例; - 解析异常或头冲突标记。 IP地址可能属于个人数据,应设置访问权限、使用目的和保留期限。 ## 配置变更怎样验证 1. 列出CDN、WAF、负载均衡和网关顺序; 2. 明确每层是覆盖还是追加头; 3. 限制Origin仅接受可信入口; 4. 测试正常IPv4、IPv6和多层代理; 5. 直接发送伪造XFF,确认被清洗; 6. 绕过一层代理,确认应用拒绝或不信任; 7. 核对日志、限流和审计结果。 ## 结论 多层代理后的真实客户端IP不是“取XFF最左边”这么简单。只有建立可信代理列表、入口清洗规则和从右向左的解析逻辑,客户端地址才可用于审计和辅助风控。 **Tags:** HTTP请求头, 企业网络合规, 网络故障排查, 隐私与合规 **Categories:** 行业洞察 ---