返回列表 发布新帖
查看: 17|回复: 0

配置 X-Forwarded-For 请求头的作用与实践指南

发表于 昨天 17:31 | 查看全部 |阅读模式

这里或许是互联网从业者的最后一片净土,随客社区期待您的加入!

您需要 登录 才可以下载或查看,没有账号?立即注册

×
一、什么是 X-Forwarded-For?
X-Forwarded-For(简称 XFF)是一个 HTTP 请求头,用于记录客户端的真实 IP 地址。当请求经过 反向代理、CDN 或负载均衡 时,源服务器接收到的请求来源通常是代理服务器的 IP,而非用户的真实地址。
此时,通过 X-Forwarded-For 头,代理可以在请求中携带原始客户端的 IP,方便后端记录日志、进行安全审计或地理定位。
示例:
X-Forwarded-For: 203.0.113.5
如果请求经过多个代理,则会出现多个 IP:
X-Forwarded-For: 203.0.113.5, 198.51.100.10, 10.0.0.2
其中:
  • 203.0.113.5 → 客户端真实 IP
  • 198.51.100.10 → 上一级代理
  • 10.0.0.2 → 最后一级代理(直接连接到源服务器)
二、为什么要配置 X-Forwarded-For?
在多层代理环境中(如 CDN + 反向代理 + 源站),如果不配置 X-Forwarded-For,源站日志会显示访问者 IP 都是代理的地址,导致以下问题:
  • 无法获取用户真实 IP
影响安全审计、日志分析与封禁策略。
  • 地理定位错误
网站统计系统无法准确判断访问者的地区。
  • WAF 或防火墙策略失效
某些安全规则依赖于真实客户端 IP,而非代理 IP。
三、Nginx 中的 X-Forwarded-For 配置
在 Nginx 作为反向代理时,可以通过以下方式在请求中添加 X-Forwarded-For:
location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_pass http://backend;
}
参数解释:
  • $proxy_add_x_forwarded_for:自动在原有的 X-Forwarded-For 头后面追加当前客户端 IP;
  • $remote_addr:表示直接连接到 Nginx 的客户端 IP;
  • Host:保持客户端原始请求的 Host 信息。
✅ 推荐写法:
  • 不直接覆盖 X-Forwarded-For;
  • 使用 $proxy_add_x_forwarded_for 追加,保证多层代理可追踪。
四、后端服务器获取真实 IP 的方法
1. Nginx 作为源站(接收代理转发)
在接收到代理转发流量的 Nginx 上,配置:
real_ip_header X-Forwarded-For;
set_real_ip_from 192.168.0.0/16;  # 可信代理IP段
real_ip_recursive on;
  • real_ip_header:指定哪个头包含真实客户端 IP;
  • set_real_ip_from:信任的代理或CDN IP 段;
  • real_ip_recursive on:从 X-Forwarded-For 的最前端提取真实 IP。
这样,Nginx 日志中的 $remote_addr 会显示用户真实 IP。
五、Apache 中的配置示例
在 Apache 中启用 mod_remoteip 模块:
a2enmod remoteip
配置文件添加:
RemoteIPHeader X-Forwarded-For
RemoteIPTrustedProxy 192.168.0.0/16
重启服务:
systemctl restart apache2
此后,%h 或 %a 日志变量将记录真实用户 IP。
六、CDN 或负载均衡中的处理
常见 CDN(如 Cloudflare、阿里云CDN、腾讯云CDN)默认会在回源时自动加上 X-Forwarded-For 或自定义头(如 CF-Connecting-IP、X-Real-IP)。
如果你的源站配置了防火墙或 WAF,应确认:
  • 已将 CDN 回源 IP 段加入信任列表;
  • 已正确识别并解析 X-Forwarded-For。
七、安全与注意事项
  • 不要信任任意来源的 X-Forwarded-For
攻击者可伪造该头部,因此仅对可信代理来源生效。
  • 日志中记录顺序要清晰
保留原始客户端 IP,以便审计追踪。
  • 多层代理时谨慎解析
如果有多层代理,真实客户端 IP 总是 X-Forwarded-For 列表中最左边的地址。
八、总结
项目作用注意事项
X-Forwarded-For传递真实客户端 IP仅可信代理可设置
$proxy_add_x_forwarded_for自动追加上一级 IP推荐使用
real_ip_header识别真实 IP 头Nginx/Apache 均支持
set_real_ip_from指定可信代理 IP 段防伪造关键配置
九、结语
X-Forwarded-For 是现代网站架构中必不可少的一个请求头。
无论是在 CDN、反向代理还是负载均衡 场景中,正确配置它不仅能帮助你准确识别访问者来源,还能为日志分析、安全防护提供可靠依据。
掌握并规范使用 X-Forwarded-For,是每一位运维工程师、后端开发者的基本功。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2001-2025 Suike Tech All Rights Reserved. 随客交流社区 (备案号:津ICP备19010126号) |Processed in 0.107153 second(s), 7 queries , Gzip On, MemCached On.
关灯 在本版发帖返回顶部
快速回复 返回顶部 返回列表