首页/安全/安全设备配置速查/真实客户端 IP 获取
WAF 防护73 条

真实客户端 IP 获取

经过 CDN、负载均衡、代理多层后,WAF 与后端要通过 X-Forwarded-For 或代理协议获取真实源地址。

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

多层代理后怎么拿到真实地址

业务链路经过 CDN、负载均衡、反向代理之后,WAF 与后端应用看到的源地址是上一跳设备的地址。真实客户端 IP 的获取有两种路径:HTTP 场景通过转发头逐跳追加原始地址,四层场景使用代理协议在连接建立时携带源地址。两条路径都涉及同样的判断——哪些中间设备是可信的,取值时必须以此为界。

基本信息

适用平台nginx、HAProxy 等代理软件,以及 WAF、负载均衡与 CDN 链路
HTTP 场景读取 X-Forwarded-For 或 X-Real-IP,按可信代理层数取值
四层场景使用 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;
}
# 后端取值:按已知可信代理层数从右往左取,不要直接取最左侧的地址

取值方式对照

场景取值位置风险
直连无代理链路层源地址无
单层代理转发头中的唯一地址客户端可伪造同名头
多层代理从右往左按可信层数取层数配错会取到伪造地址
四层代理代理协议提供的源地址两端未同时开启则握手失败
转发头可被客户端伪造,风控与封禁策略不要直接信任客户端提交的头部,必须结合可信代理层数与来源校验。

易错点

  • 直接取转发头最左侧的地址,多层代理下这个值可能由客户端填入,导致封禁错误对象
  • 可信代理层数配置错误,取到伪造地址,风控策略被绕过而日志看起来一切正常
  • 四层负载未开启代理协议,WAF 看到的是负载均衡地址,日志失去分析价值
  • 只在前端添加转发头而后端未按约定取值,配置加了一堆但日志毫无变化

数据来源与参考

  • RFC 7239(Forwarded 头)
  • nginx 官方文档:proxy_set_header
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌