排查接口报错时打开请求头,发现多了个 X-Forwarded-For,里面一串地址让人摸不着头脑。这个头是谁加上的?里面的地址能不能当真?这篇把 X-Forwarded-For 在代理链路里的来龙去脉讲清楚,排查时就知道该看哪一位。
X-Forwarded-For 是怎么被”接力”写上的
X-Forwarded-For(简称 XFF)是一种约定俗成的请求头,用来记录请求一路经过的客户端与转发节点地址。直连时请求里没有这个头;一旦流量经过代理,转发方就会按自己的规则往里追加一段地址。链路越长,头里的地址越多,服务器读起来越要小心。
追加、透传还是重写,取决于代理类型
同样是转发,不同代理的写法不一样:有的代理只透传原请求头,不主动加 XFF;有的代理会在尾部追加自己的出口地址;还有的会把整个 XFF 重写成自己的信息。类型不同,最终头里呈现的内容就不同。排查时先搞清楚自己用的代理属于哪种,才不会被头里的地址带偏。
站点到底信哪个地址
目标服务器面对一串 XFF 地址,习惯上取最左侧那个当作”原始客户端地址”,因为按惯例最左是客户端最初发起的地址。但这个惯例并不强制:代理可以改写,客户端也可以自行填写最左地址。所以站点一般还会结合连接来源地址(即最后一个转发者)一起判断,不会只凭 XFF 下结论。
| 环节 | 写入内容 | 可信度 |
|---|---|---|
| 客户端 | 可自行填写最左地址 | 低,可伪造 |
| 转发代理 | 追加自身出口地址 | 中,取决于代理规则 |
| 目标服务器 | 读 XFF 并参考连接来源 | 高,连接地址最不易作假 |
| 中间安全设备 | 可能改写或清空 XFF | 视策略而定 |
- 先看连接来源:服务器视角下 TCP 连接来自代理,这是最不容易作假的地址
- 再读 XFF 最左位:只作参考,别当作铁证
- 确认代理写入规则:查文档或咨询供应商,弄清是追加还是重写
- 跨层对照:把请求头、连接地址、日志三方拼起来看,定位才准
XFF 就像包裹上的中转贴条:每过一站的记录都有用,但哪张贴条是真的,要看快递单上的出发点,而不是只看贴条本身。
与 IP 代理的关系:代理是 XFF 头的主要写入者之一,其写入规则直接影响服务器对访客地址的判断;理解 XFF 在链路中的流转,是评估代理出口在业务日志与安全判断中作用的基础。所有使用都应遵循平台规则与法律法规,用于正当业务目的。
