简称XFF头,是一个扩展头,它代表客户端也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项(百度百科:用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段)。
X-Forwarded-For请求头格式:
X-Forwarded-For:client,proxy1,proxy2
格式比较简单,首先是离服务端最远的设备IP,然后就是每一级代理设备的IP。如果一个HTTP请求到达服务器之前,经过了三个代理Proxy1、Proxy2、Proxy3,IP分别为IP1、IP2、IP3,用户真实IP是IP0,那么根据XFF标准,服务器最终会收到下面的信息:
X-Forwarded-For:IP0,IP1,IP2
Proxy3直连服务器,它会给XFF追加IP2,帮Proxy2转发请求。列表中并没有 IP3,IP3 可以在服务端通过 $ remote_address 字段获得。我们知道 HTTP 连接基于 TCP 连接,HTTP 协议中没有 IP 的概念,$remote_address 来自 TCP 连接,表示与服务端建立 TCP 连接的设备 IP,在这个例子里就是 IP3。
详细分析一下,这样的结果是经过这样的流程而形成的:
- 用户IP0—> 代理Proxy1(IP1),Proxy1记录用户IP0,并将请求转发