HTTP 標頭和 Application Load Balancer
HTTP 請求和 HTTP 回應使用標頭欄位來傳送有關 HTTP 訊息的資訊。HTTP 標頭會自動新增。標頭欄位是以冒號分隔的名稱值組,以歸位字元 (CR) 和換行 (LF) 分隔。一組以 RFC 2616 定義的標準 HTTP 標頭欄位,訊息標頭X-Forwarded
字首。Application Load Balancer 支援以下 X-Forwarded
標頭。
如需 HTTP 連線的詳細資訊,請參閱 Elastic Load Balancing 使用者指南中的請求路由。
X-Forwarded 標頭
X-Forwarded-For
當您使用 HTTP 或 HTTPS 負載平衡器時,X-Forwarded-For
請求標頭會協助您識別用戶端的 IP 地址。由於負載平衡器攔截用戶端和伺服器之間的流量,伺服器存取日誌僅包含負載平衡器的 IP 地址。若要查看用戶端的 IP 地址,請使用 routing.http.xff_header_processing.mode
屬性。此屬性可讓您在 Application Load Balancer 將 HTTP 請求傳送至目標之前,修改、保留或移除該請求中的 X-Forwarded-For
標頭。此屬性的可能值為 append
、preserve
和 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-ip-address
附加的 client-port-number
(以冒號分隔)。標頭採用以下格式:
IPv4 -- X-Forwarded-For: client-ip-address
:client-port-number
IPv6 -- X-Forwarded-For: [client-ip-address]
:client-port-number
請注意,對於 IPv6,當負載平衡器將 client-ip-address
附加到現有的標頭時,其會以方括號括住該地址。
下列是用戶端 (IPv4 地址為 12.34.56.78
,連接埠號碼為 8080
) 的 X-Forwarded-For
請求標頭範例。
X-Forwarded-For: 12.34.56.78:8080
下列是用戶端 (IPv6 地址為 2001:db8:85a3:8d3:1319:8a2e:370:7348
,連接埠號碼為 8080
) 的 X-Forwarded-For
請求標頭範例。
X-Forwarded-For: [2001:db8:85a3:8d3:1319:8a2e:370:7348]:8080
保留
屬性中的 preserve
模式可確保 HTTP 請求的 X-Forwarded-For
標頭在傳送到目標之前,請求中不會以任何方式遭到修改。
Remove (移除)
屬性中的 remove
模式會在將 HTTP 請求的 X-Forwarded-For
標頭在傳送到目標之前將其移除。
注意
如果您啟用用戶端連接埠保留屬性 (routing.http.xff_client_port.enabled
),並為 routing.http.xff_header_processing.mode
屬性選取 preserve
或 remove
,則 Application Load Balancer 會覆寫用戶端連接埠保留屬性。此屬性可將 X-Forwarded-For
標頭保持不變,或者根據您選取的模式將其移除,然後再將標頭傳送到目標。
下表顯示當您選取 append
、preserve
或 remove
模式時,目標接收到的 X-Forwarded-For
標頭範例。在此範例中,最後一個跳轉的 IP 地址為 127.0.0.1
。
請求說明 |
範例請求 |
append 模式中的 XFF |
preserve 模式中的 XFF |
remove 模式中的 XFF |
---|---|---|---|---|
傳送的請求沒有 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 |
不存在 |
傳送的請求包含 XFF 標頭和多個用戶端 IP 地址。 | 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 |
不存在 |
使用 AWS CLI 修改、保留或移除 X-Forwarded-For 標頭
以 屬性來使用 modify-load-balancer-attributesrouting.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
請求標頭協助您識別用戶端用於連接到負載平衡器的目的地連接埠。