X-Forwarded-For(XFF)請求標頭是一個事實上的 http 標頭,用于標識通過代理服務器連接到 web 服務器的客戶端的原始 IP 地址。
當客戶端直接連接到服務器時,其 IP 地址被發送給服務器(并且經常被記錄在服務器的訪問日志中)。但是如果客戶端通過正向或反向代理服務器進行連接,服務器就只能看到最后一個代理服務器的 IP 地址,這個 IP 通常沒什么用。
如果最后一個代理服務器是與服務器安裝在同一臺主機上的負載均衡服務器,則更是如此。X-Forwarded-For 的出現,就是為了向服務器提供更有用的客戶端 IP 地址,X-Forwarded-For 的語法格式為:
X-Forwarded-For: <client>, <proxy1>, <proxy2>
HTTP請求和HTTP響應使用標頭字段來發送有關HTTP消息的信息。AWS 中的適用于應用程序負載均衡器(Application Load Balancers)和適用于 Classic 負載均衡器(Classic Load Balancers),都支持http協議,在使用HTTP或HTTPS負載均衡器時,可以幫助識別客戶端的 IP 地址。
通常情況下,負載均衡器會攔截客戶端和服務器之間的流量,因此服務器訪問日志中將僅含有負載均衡器的 IP 地址。入股需要查看客戶端的 IP 地址,那么就需要使用 X-Forwarded-For 請求標頭。Elastic Load Balancing 會在 X-Forwarded-For 請求標頭中存儲客戶端的 IP 地址,并將標頭傳遞到后端的服務器。
只要同時涉及到負載均衡器和識別客戶端的 IP 地址的需求,那么就要想到應用程序負載均衡器(Application Load Balancers)和 Classic 負載均衡器(Classic Load Balancers),以及X-Forwarded-For 請求標頭。