HTTP 標頭和 Application Load Balancer - Elastic Load Balancing

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

HTTP 標頭和 Application Load Balancer

HTTP 請求和 HTTP 回應使用標頭欄位來傳送有關 HTTP 訊息的資訊。HTTP 標頭會自動新增。標頭欄位是以冒號分隔的名稱值組,以歸位字元 (CR) 和換行 (LF) 分隔。一組以 RFC 2616 定義的標準 HTTP 標頭欄位,訊息標頭。也有應用程式會自動新增並廣泛採用的非標準 HTTP 標頭。有些非標準 HTTP 標頭擁有 X-Forwarded 字首。Application Load Balancer 支援下列項目X-Forwarded標頭。

如需 HTTP 連線的詳細資訊,請參閱 Elastic Load Balancing 使用者指南中的請求路由

X-Forwarded-For

當您使用 HTTP 或 HTTPS 負載平衡器時,X-Forwarded-For 請求標頭會協助您識別用戶端的 IP 地址。由於負載平衡器會攔截用戶端和伺服器之間的流量,因此您的伺服器存取記錄僅包含負載平衡器的 IP 位址。如果要查看用戶端的 IP 地址,請使用routing.http.xff_header_processing.mode屬性。此屬性可讓您修改、保留或移除X-Forwarded-ForApplication Load Balancer 器將要求傳送至目標之前,HTTP 要求中的標頭。此屬性的可能值為appendpreserve,以及remove。此屬性的預設值為append

附加

依預設,Application Load Balancer 器會將用戶端的 IP 位址儲存在X-Forwarded-For請求標頭,並將標頭傳遞給您的伺服器。如果X-Forwarded-For請求標頭未包含在原始請求標頭,負載平衡器會以用戶端 IP 地址為請求值建立請求標頭。否則,負載平衡器會將用戶端 IP 地址新增至現有標頭,然後將標頭傳遞給您的伺服器。X-Forwarded-For 請求標頭可能包含以逗號分隔的多個 IP 地址。最左邊的地址是首先提出請求的用戶端 IP 地址。後面則以鏈顯示所有接續的代理標識符。

X-Forwarded-For 請求標頭採用以下格式:

X-Forwarded-For: client-ip-address

下列是具有 IP 地址 203.0.113.7 之用戶端的範例 X-Forwarded-For 請求標頭。

X-Forwarded-For: 203.0.113.7

下列是具有 IPv6 地址 2001:DB8::21f:5bff:febf:ce22:8a2e 之用戶端的範例 X-Forwarded-For 請求標頭。

X-Forwarded-For: 2001:DB8::21f:5bff:febf:ce22:8a2e

當客戶端端口保存屬性(routing.http.xff_client_port.enabled) 已在負載平衡器上啟用,X-Forwarded-For請求標頭包括client-port-number附加到client-ip-address,以冒號分隔。標頭接著會以下格式如下:

IPv4 -- X-Forwarded-For: client-ip-address:client-port-number
IPv6 -- X-Forwarded-For: [client-ip-address]:client-port-number

對於 IPv6,請注意,當負載平衡器附加client-ip-address到現有的頭,它用方括號括住地址。

以下是範例X-Forwarded-For具有 IPv4 位址的用戶端的要求標頭12.34.56.78以及連接埠號碼8080

X-Forwarded-For: 12.34.56.78:8080

以下是範例X-Forwarded-For具有 IPv6 位址的用戶端的要求標頭2001:db8:85a3:8d3:1319:8a2e:370:7348以及連接埠號碼8080

X-Forwarded-For: [2001:db8:85a3:8d3:1319:8a2e:370:7348]:8080

保留

所以此preserve屬性中的模式可確保X-Forwarded-ForHTTP 請求中的標頭在發送到目標之前不會以任何方式進行修改。

Remove (移除)

所以此remove屬性中的模式會移除X-Forwarded-ForHTTP 請求中的標頭,然後再將其發送到目標。

注意

如果您啟用用戶端連接埠保留屬性 (routing.http.xff_client_port.enabled),並選取preserve或者remove為了routing.http.xff_header_processing.mode屬性中,「Application Load Balancer 器」會覆寫用戶端連接埠保留屬性。它保持了X-Forwarded-For標題不變,或者根據您選擇的模式將其刪除,然後再將其發送到目標。

下表顯示的範例X-Forwarded-For當您選擇目標時接收到的標題appendpreserveremove模式。在此範例中,最後一個躍點的 IP 地址為127.0.0.1

要求描述

範例請求

XFF 中append模式 XFF 中preserve模式 XFF 中remove模式
傳送要求時沒有 XFF 標頭 GET /index.html HTTP/1.1 Host: example.com X-Forwarded-For: 127.0.0.1 不存在 不存在
請求與 XFF 標頭和客戶端 IP 地址一起發送。 GET /index.html HTTP/1.1 Host: example.com X-Forwarded-For: 127.0.0.4 X-Forwarded-For: 127.0.0.4, 127.0.0.1 X-Forwarded-For: 127.0.0.4 不存在
請求與具有多個客戶端 IP 地址的 XFF 標頭一起發送。 GET /index.html HTTP/1.1 Host: example.com X-Forwarded-For: 127.0.0.4, 127.0.0.8 X-Forwarded-For: 127.0.0.4, 127.0.0.8, 127.0.0.1 X-Forwarded-For: 127.0.0.4, 127.0.0.8 不存在

若要修改、保留或移除X-Forwarded-For標頭使用控制台

  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格的 LOAD BALANCING (負載平衡) 下方,選擇 Load Balancers (負載平衡器)。

  3. 選取負載平衡器。

  4. Description (描述) 標籤上,選擇 Edit attributes (編輯屬性)

  5. 在「」編輯負載平衡器屬性頁面上,選取附加(預設)、保留,或移除

  6. 選擇 Save (儲存)。

若要修改、保留或移除X-Forwarded-For標頭使用AWS CLI

使用modify-load-balancer-attributes使用指令routing.http.xff_header_processing.mode屬性。

X-Forwarded-Proto

X-Forwarded-Proto 請求標頭協助您識別用戶端用於連接到您的負載平衡器的通訊協定 (HTTP 或 HTTPS)。您的伺服器存取日誌僅包含在伺服器和負載平衡器之間使用的通訊協定,但不包含用戶端和負載平衡器之間使用的通訊協定相關資訊。若要判斷用戶端和負載平衡器之間使用的通訊協定,請使用 X-Forwarded-Proto 請求標頭。Elastic Load Balancing 會將用戶端和負載平衡器之間使用的通訊協定儲存在 X-Forwarded-Proto 請求標頭,並將標頭傳遞給您的伺服器。

您的應用程式或網站可以使用存放在 X-Forwarded-Proto 請求標頭中的通訊協定,藉以產生重新導向到適當的 URL 的回應。

X-Forwarded-Proto 請求標頭採用以下格式:

X-Forwarded-Proto: originatingProtocol

以下範例包含適用於從用戶端產生的 X-Forwarded-Proto 請求標頭,以做為 HTTPS 請求:

X-Forwarded-Proto: https

X-Forwarded-Port

X-Forwarded-Port 請求標頭協助您識別用戶端用於連接到負載平衡器的目的地連接埠。