首页/安全/安全设备配置速查/真实客户端 IP 传递
NAT 与发布75 条

真实客户端 IP 传递

经过 NAT、负载均衡、WAF 多跳后,后端看到的源地址可能是中间设备地址,需通过 X-Forwarded-For 等机制还原。

安全设备配置速查安全更新于 2026-10-13

后端为什么看到的都是中间设备地址

请求经过 NAT、负载均衡、反向代理或 WAF 之后,链路层的源地址已经变成上一跳设备的地址,后端应用日志里全是同一个地址,风控、审计与故障定位都无从下手。解决方式分两类:HTTP 场景通过转发头传递原始地址,非 HTTP 场景使用代理协议在四层携带源地址信息。使用的前提是明确信任边界——转发头可以被伪造。

基本信息

适用平台nginx、HAProxy 等代理,以及 WAF 与负载均衡设备
HTTP 方案X-Forwarded-For 逐跳追加,X-Real-IP 记录最近一跳
非 HTTP 方案PROXY protocol 在四层携带原始源地址
安全前提只信任已知代理层追加的地址,按代理层数从左或从右取值

典型使用场景

  • 应用日志分析:需要按真实客户端地址统计来源与访问行为
  • 访问控制:安全策略与黑白名单必须基于真实源地址判断
  • 风控与限速:按客户端而非按中间设备做频率限制
  • 审计留存:合规要求记录真实访问来源,转发头方案是常见落地方式
  • 故障定位:定位某个客户端的问题时,需要确认请求确实来自该地址

nginx 传递示例

nginx 传递示例
location / {
    proxy_set_header X-Real-IP $remote_addr;                          # 最近一跳的地址
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;       # 逐跳追加,保留历史链路
    proxy_set_header X-Forwarded-Proto $scheme;                        # 传递原始协议
    proxy_pass http://192.168.20.10:8080;
}
# 后端取值规则:按已知代理层数从右往左取,或从可信代理列表中匹配

方案对照

方案适用协议注意事项
X-Forwarded-ForHTTP/HTTPS可被客户端伪造,需约定可信层数
X-Real-IPHTTP/HTTPS仅记录最近一跳,多级代理下会覆盖
PROXY protocolTCP(含 HTTPS 直通)两端都要支持,否则握手失败
网络层方案任意协议改造量大,跨网段实现受限
转发头可被客户端伪造,风控与访问控制不要直接信任该头的任意外部值,必须按可信代理层数取值或校验来源。

易错点

  • 直接信任 XFF 中的首个地址,多层代理下这个值可能由客户端填入,导致封禁错误对象
  • 可信代理层数配置错误,取到的是伪造地址,风控策略被绕过
  • 四层负载未开启代理协议,WAF 与后端看到的都是负载均衡地址,日志失去分析价值
  • 只在前端加转发头而后端未按约定取值,加了配置但没有效果,问题表现为「日志还是那样」

数据来源与参考

  • RFC 7239(Forwarded HTTP 扩展头)
  • nginx 官方文档:ngx_http_proxy_module
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌