Application Load Balancer 的接聽程式 - Elastic Load Balancing

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

Application Load Balancer 的接聽程式

接聽程式是檢查連線請求的程序,必須使用您已設定的通訊協定與連接埠。開始使用 Application Load Balancer 之前,必須新增至少一個接聽程式。如果負載平衡器沒有接聽程式,就無法接收來自用戶端的流量。您為接聽程式定義的規則決定負載平衡器如何將請求路由至您註冊的目標,例如 EC2 執行個體。

接聽程式組態

接聽程式支援下列通訊協定與連接埠:

  • 通訊協定:HTTP、HTTPS

  • Ports (連接埠):1-65535

您可以使用 HTTPS 接聽程式將加密和解密的工作卸載至負載平衡器,讓您的應用程式可以專注於其業務邏輯。如果接聽程式通訊協定是 HTTPS,則您必須在接聽程式上部署至少一個 SSL 伺服器憑證。如需詳細資訊,請參閱為您的 Application Load Balancer 建立 HTTPS 接聽程式

如果您必須確保目標解密 HTTPS 流量,而不是負載平衡器,則可以在連接埠 443 上使用 TCP 接聽程式建立 Network Load Balancer。透過 TCP 接聽程式,負載平衡器會將加密的流量傳遞至目標,而不會解密。如需詳細資訊,請參閱《Network Load Balancer 使用者指南》。

Application Load Balancer 為 WebSockets 提供原生支援。您可以使用 HTTP 連線升級,將現有的 HTTP/1.1 連線升級為 a WebSocket (wswss) 連線。升級時,用於請求的 TCP 連線 (負載平衡器和目標) 會透過負載平衡器在用戶端與目標之間變成持久性 WebSocket 連線。您可以搭配 WebSockets HTTP和 Word 接聽程式使用 HTTPS。您為接聽程式選擇的選項適用於 WebSocket 連線以及 HTTP 流量。如需詳細資訊,請參閱 Amazon WebSocket 開發人員指南中的Word 通訊協定如何運作 CloudFront

Application Load Balancer 使用 HTTP 接聽程式為 HTTPS/2 提供原生支援。您可以使用一個 HTTP/2 連線並行傳送最多 128 個請求。您可以使用通訊協定版本,使用 HTTP/2 將請求傳送至目標。如需詳細資訊,請參閱通訊協定版本。由於 HTTP/2 更有效率地使用前端連線,因此您可能會注意到用戶端和負載平衡器之間的連線較少。您無法使用 HTTP/2 的伺服器推送功能。

如需詳細資訊,請參閱 Elastic Load Balancing User Guide 中的 Request routing

接聽程式屬性

以下是 Application Load Balancer 的接聽程式屬性

routing.http.request.x_amzn_mtls_clientcert_serial_number.header_name

可讓您修改 X-Amzn-Mtls-Clientcert-Serial-Number HTTP 請求標頭的標頭名稱。

routing.http.request.x_amzn_mtls_clientcert_issuer.header_name

可讓您修改 X-Amzn-Mtls-Clientcert-Issuer HTTP 請求標頭的標頭名稱。

routing.http.request.x_amzn_mtls_clientcert_subject.header_name

可讓您修改 X-Amzn-Mtls-Clientcert-Subject HTTP 請求標頭的標頭名稱。

routing.http.request.x_amzn_mtls_clientcert_validity.header_name

可讓您修改 X-Amzn-Mtls-Clientcert-Validity HTTP 請求標頭的標頭名稱。

routing.http.request.x_amzn_mtls_clientcert_leaf.header_name

可讓您修改 X-Amzn-Mtls-Clientcert-Leaf HTTP 請求標頭的標頭名稱。

routing.http.request.x_amzn_mtls_clientcert.header_name

可讓您修改 X-Amzn-Mtls-Clientcert HTTP 請求標頭的標頭名稱。

routing.http.request.x_amzn_tls_version.header_name

可讓您修改 X-Amzn-Tls-Version HTTP 請求標頭的標頭名稱。

routing.http.request.x_amzn_tls_cipher_suite.header_name

可讓您修改 X-Amzn-Tls-Cipher-Suite HTTP 請求標頭的標頭名稱。

routing.http.response.server.enabled

可讓您允許或移除 HTTP 回應伺服器標頭。

routing.http.response.strict_transport_security.header_value

告知瀏覽器,只能使用 HTTPS 存取網站,且未來任何使用 HTTP 存取網站的嘗試都應該自動轉換為 HTTPS。

routing.http.response.access_control_allow_origin.header_value

指定允許存取伺服器的原始伺服器。

routing.http.response.access_control_allow_methods.header_value

傳回從不同原始伺服器存取伺服器時,允許使用哪些 HTTP 方法。

routing.http.response.access_control_allow_headers.header_value

指定請求期間可以使用哪些標頭。

routing.http.response.access_control_allow_credentials.header_value

指出提出請求時,瀏覽器是否應包含 Cookie 或身分驗證等憑證。

routing.http.response.access_control_expose_headers.header_value

傳回瀏覽器可以向請求用戶端公開的標頭。

routing.http.response.access_control_max_age.header_value

以秒為單位,指定可快取飛行前請求結果的時間長度。

routing.http.response.content_security_policy.header_value

指定瀏覽器強制執行的限制,以協助將特定類型安全威脅的風險降至最低。

routing.http.response.x_content_type_options.header_value

指示是否應遵循 Content-Type 標頭中公告的 MIME 類型,且不得變更。

routing.http.response.x_frame_options.header_value

指出是否允許瀏覽器在框架iframe內嵌物件中轉譯頁面。

接聽程式規則

每個接聽程式都有預設動作,也稱為預設規則。無法刪除預設規則,且最後執行的一律是預設規則。您可以建立其他規則,這些規則會由優先順序、一個或多個動作及一個或多個條件組成。您可以隨時新增或編輯規則。如需詳細資訊,請參閱編輯規則

預設規則

建立接聽程式時,您會定義預設規則的預設動作。預設規則不能有條件。如果沒有符合任何接聽程式規則的條件,則會執行預設規則的動作。

以下顯示主控台中預設規則的範例:

接聽程式的預設規則。

規則優先順序

每個規則具有優先順序。依優先順序評估規則,從最低值到最高值。預設規則最後評估。您可以隨時變更非預設規則的優先順序。您無法變更預設規則的優先順序。如需詳細資訊,請參閱更新規則優先順序

規則動作

每個規則動作都包含類型、優先順序和執行動作所需的資訊。如需詳細資訊,請參閱規則動作類型

規則條件

每個規則條件具有類型和組態資訊。滿足規則的條件時,即會執行它的動作。如需詳細資訊,請參閱規則條件類型

規則動作類型

以下是接聽程式規則支援的動作類型:

authenticate-cognito

【HTTPS 接聽程式】 使用 Amazon Cognito 來驗證使用者。如需詳細資訊,請參閱使用 Application Load Balancer 來驗證使用者身分

authenticate-oidc

【HTTPS 接聽程式】 使用符合 OpenID Connect (OIDC) 的身分提供者來驗證使用者。

fixed-response

傳回自訂 HTTP 回應。如需詳細資訊,請參閱固定回應動作

forward

將請求轉送到指定的目標群組。如需詳細資訊,請參閱轉送動作

redirect

將請求從一個 URL 重新導向至另一個 Word。如需詳細資訊,請參閱重新導向動作

優先順序最低的動作會先執行。每個規則必須包含剛好以下其中一個動作:forwardredirectfixed-response,而且必須是最後要執行的動作。

如果通訊協定版本為 gRPC 或 HTTP/2,則唯一支援的動作是forward動作。

固定回應動作

您可以使用 fixed-response 動作來捨棄用戶端請求並傳回自訂 HTTP 回應。您可以使用此動作來傳回 2XX、4XX 或 5XX 回應代碼和選用的訊息。

採取fixed-response動作時,該動作和重新導向目標的 URL 會記錄在存取日誌中。如需詳細資訊,請參閱存取日誌項目。會在 HTTP_Fixed_Response_Count 指標中報告成功的 fixed-response 動作計數。如需詳細資訊,請參閱Application Load Balancer 指標

範例 的固定回應動作範例 AWS CLI

您可以在建立或修改規則時指定動作。如需詳細資訊,請參閱 create-rulemodify-rule 命令。下列動作傳送包含指定的狀態碼和訊息本文的固定回應。

[ { "Type": "fixed-response", "FixedResponseConfig": { "StatusCode": "200", "ContentType": "text/plain", "MessageBody": "Hello world" } } ]

轉送動作

您可以使用 forward 動作將請求路由傳送到一或多個目標群組。如果您為一個 forward 動作指定多個目標群組,則必須為每個目標群組指定加權。每個目標群組權重為介於 0 到 999 之間的值。符合加權目標群組之監聽程式規則的請求,會根據其權重分配到這些目標群組。例如,如果您指定兩個目標群組,每個目標群組的權重為 10,則每個目標群組都會收到一半的請求。如果您指定兩個目標群組,一個權重為 10,另一個權重為 20,則權重為 20 的目標群組接收的請求數量是另一個目標群組的兩倍。

根據預設,在加權的目標群組之間分配流量設定規則,並不保證可以接受黏性工作階段。若要確保接受黏性工作階段,請啟用目標群組的黏性規則。當負載平衡器第一次將請求路由至加權目標群組時,會產生名為 AWSALBTG 的 Cookie,可編碼所選目標群組的相關資訊、加密 Cookie,並在回應用戶端時包含 Cookie。用戶端應該包含負載平衡器後續請求中接收的 cookie。當負載平衡器收到符合已啟用目標群組粘性的規則的請求並包含 cookie 時,會將請求路由至 cookie 中指定的目標群組。

Application Load Balancer 不支援以 URL 編碼的 Cookie 值。

透過 CORS (跨來源資源共用) 請求,某些瀏覽器需要SameSite=None; Secure啟用黏性。在此情況下,Elastic Load Balancing 會產生第二個 Cookie, AWSALBTGCORS,其中包含與原始黏性 Cookie 相同的資訊,以及此SameSite屬性。用戶端會同時收到這兩個 Cookie。

範例 具有一個目標群組的轉送動作範例

您可以在建立或修改規則時指定動作。如需詳細資訊,請參閱 create-rulemodify-rule 命令。下列動作將請求轉送到指定的目標群組。

[ { "Type": "forward", "ForwardConfig": { "TargetGroups": [ { "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067" } ] } } ]
範例 具有兩個加權目標群組的轉送動作範例

下列動作會根據每個目標群組的權重,將要求轉送至兩個指定的目標群組。

[ { "Type": "forward", "ForwardConfig": { "TargetGroups": [ { "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/blue-targets/73e2d6bc24d8a067", "Weight": 10 }, { "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/green-targets/09966783158cda59", "Weight": 20 } ] } } ]
範例 已啟用粘性的轉送動作範例

如果您有一個轉送動作涉及多個目標群組,且一個或多個目標群組已啟用粘性會話,則您必須啟用目標群組粘性。

下列動作會將請求轉送至兩個指定的目標群組,搭配啟用目標群組黏性。不包含該綁定 Cookie 的請求會根據每個目標群組的權重進行路由。

[ { "Type": "forward", "ForwardConfig": { "TargetGroups": [ { "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/blue-targets/73e2d6bc24d8a067", "Weight": 10 }, { "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/green-targets/09966783158cda59", "Weight": 20 } ], "TargetGroupStickinessConfig": { "Enabled": true, "DurationSeconds": 1000 } } } ]

重新導向動作

您可以使用 redirect 動作將用戶端請求從一個 URL 重新導向至另一個 Word。您可以根據您的需求將重新導向設定為暫時 (HTTP 302) 或永久 (HTTP 301)。

URI由下列元件組成:

protocol://hostname:port/path?query

您必須修改以下至少一個元件,以避免重新導向迴圈:protocol、hostname、port 或 path。未修改的任何元件會維持其原始值。

protocol

通訊協定 (HTTP 或 HTTPS)。您可以將 HTTP 重新導向至 HTTP、HTTP 重新導向至 HTTPS,以及 HTTPS 重新導向至 HTTPS。您無法將 HTTPS 重新導向至 HTTP。

hostname

主機名稱。主機名稱不區分大小寫、長度最多 128 個字元,由英數字元、萬用字元 (* 和 ?) 和連字號 (-) 組成。

port

連接埠 (1 到 65535)。

路徑

絕對路徑,開頭為前置字元 "/"。路徑區分大小寫、長度最多 128 個字元,由英數字元、萬用字元 (* 和 ?)、& (使用 &) 和下列特殊字元組成:_-.$/~"'@:+。

query

查詢參數。長度上限為 128 個字元。

您可以使用下列預留關鍵字,在目標 URL 中重複使用原始 Word 的 URL URI元件:

  • #{protocol} - 保留通訊協定。用於通訊協定和查詢元件。

  • #{host} - 保留網域。用於主機名稱、路徑和查詢元件。

  • #{port} - 保留連接埠。用於連接埠、路徑和查詢元件。

  • #{path} - 保留路徑。用於路徑和查詢元件。

  • #{query} - 保留查詢參數。用於查詢元件。

採取 redirect 動作時,會將動作記錄於存取日誌中。如需詳細資訊,請參閱存取日誌項目。會在 HTTP_Redirect_Count 指標中報告成功的 redirect 動作計數。如需詳細資訊,請參閱Application Load Balancer 指標

範例 使用主控台的重新導向動作範例

下列規則會設定永久重新導向至使用 URL 通訊協定和指定連接埠 (40443) 的 HTTPS,但會保留原始主機名稱、路徑和查詢參數。這個畫面等同於 "https://#{host}:40443/#{path}?#{query}"。

此規則會將請求重新導向至使用 URL 通訊協定和指定連接埠 (40443) 的 HTTPS,但會保留原始 URL 的原始網域、路徑和查詢參數。

下列規則會設定永久重新導向至保留原始通訊協定、連接埠、主機名稱和查詢參數的 URL,並使用 #{path}關鍵字來建立修改過的路徑。這個畫面等同於 "#{protocol}://#{host}:#{port}/new/#{path}?#{query}"。

將請求重新導向至保留原始通訊協定、連接埠、主機名稱和查詢參數的 URL 的規則,並使用 #{path}關鍵字來建立修改過的路徑。
範例 的重新導向動作範例 AWS CLI

您可以在建立或修改規則時指定動作。如需詳細資訊,請參閱 create-rulemodify-rule 命令。下列動作會將 HTTP 請求重新導向至連接埠 443 上的 HTTPS 請求,其主機名稱、路徑和查詢字串與 HTTP 請求相同。

[ { "Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "Host": "#{host}", "Path": "/#{path}", "Query": "#{query}", "StatusCode": "HTTP_301" } } ]

規則條件類型

以下是規則支援的條件類型:

host-header

根據每個請求的主機名稱來路由傳送。如需詳細資訊,請參閱主機條件

http-header

根據每個請求的 HTTP 標頭進行路由。如需詳細資訊,請參閱HTTP標頭條件

http-request-method

根據每個請求的 HTTP 請求方法進行路由。如需詳細資訊,請參閱HTTP 請求方法條件

path-pattern

根據請求 URLs 中的路徑模式進行路由。如需詳細資訊,請參閱路徑條件

query-string

根據查詢字串中的鍵值組或值來路由傳送。如需詳細資訊,請參閱查詢字串條件

source-ip

根據每個請求的來源 IP 位址來路由傳送。如需詳細資訊,請參閱來源 IP 地址條件

每個規則可以選擇性地包含下列每個條件中的一個:host-headerhttp-request-methodpath-patternsource-ip。每個規則也可以選擇性地包含下列每個條件中的一或多個:http-headerquery-string

每個條件最多可以指定三個比對評估。例如,針對每個http-header條件,您最多可以指定三個字串,以與請求中的 HTTP 標頭值進行比較。如果其中一個字串符合 HTTP 標頭的值,表示滿足條件。若要求所有字串都要符合,請為每個比對評估建立一個條件。

每個規則最多可以指定五個比對評估。例如,您可以建立含有五個條件的規則,其中每個條件有一個比對評估。

您可以在 http-headerhost-headerpath-patternquery-string 條件的比對評估中包含萬用字元。每個規則以五個萬用字元為限。

規則僅適用於可見的 ASCII 字元;控制字元 (0x00 至 0x1f 和 0x7f) 除外。

如需示範,請參閱 Advanced Request Routing

HTTP標頭條件

您可以使用 HTTP 標頭條件來設定規則,以根據請求的 HTTP 標頭來路由請求。您可以指定標準或自訂 HTTP 標頭欄位的名稱。標頭名稱和比對評估不區分大小寫。比較字串中支援下列萬用字元:* (符合 0 個或多個字元) 和 ? (確切符合 1 個字元)。標頭名稱中不支援萬用字元。

範例 的 HTTP 標頭條件範例 AWS CLI

您可以在建立或修改規則時指定條件。如需詳細資訊,請參閱 create-rulemodify-rule 命令。當請求的 User-Agent 標頭符合其中一個指定的字串時,即滿足下列條件。

[ { "Field": "http-header", "HttpHeaderConfig": { "HttpHeaderName": "User-Agent", "Values": ["*Chrome*", "*Safari*"] } } ]

HTTP 請求方法條件

您可以使用 HTTP 請求方法條件來設定規則,以根據請求的 HTTP 請求方法路由請求。您可以指定標準或自訂 HTTP 方法。比對評估區分大小寫。不支援萬用字元;因此,方法名稱必須完全相符。

我們建議您以相同方式路由 GET 和 HEAD 請求,因為 HEAD 請求的回應可能會快取。

範例 的範例 HTTP 方法條件 AWS CLI

您可以在建立或修改規則時指定條件。如需詳細資訊,請參閱 create-rulemodify-rule 命令。使用指定方法的請求符合下列條件。

[ { "Field": "http-request-method", "HttpRequestMethodConfig": { "Values": ["CUSTOM-METHOD"] } } ]

主機條件

您可以使用主機條件來定義規則,以根據主機標頭中的主機名稱來路由傳送請求 (也稱為以主機為基礎的路由)。這可讓您使用單一負載平衡器來支援多個子網域和不同的頂層網域。

主機名稱不區分大小寫,長度最多可達 128 個字元,而且可以包含下列任何字元:

  • A-Z、a-z、0-9

  • - .

  • * (符合 0 個或多個字元)

  • ? (確切符合 1 個字元)

您必須至少包含一個 "." 字元。您只可以在最後的 "." 字元之後包含字母字元。

主機名稱範例
  • example.com

  • test.example.com

  • *.example.com

規則 *.example.com 會符合 test.example.com 但不會符合 example.com

範例 的範例主機標頭條件 AWS CLI

您可以在建立或修改規則時指定條件。如需詳細資訊,請參閱 create-rulemodify-rule 命令。當請求的主機標頭符合指定的字串時,即滿足下列條件。

[ { "Field": "host-header", "HostHeaderConfig": { "Values": ["*.example.com"] } } ]

路徑條件

您可以使用路徑條件來定義規則,以根據請求中的 URL 路由請求 (也稱為路徑型路由)。

路徑模式只會套用至 URL 的路徑,而不是其查詢參數。它僅適用於可見的 ASCII 字元;控制字元 (0x00 至 0x1f 和 0x7f) 除外。

只有在 URI 標準化發生後,才會執行規則評估。

名稱模式區分大小寫,長度最多可達 128 個字元,而且可以包含下列任何字元。

  • A-Z、a-z、0-9

  • _ - . $ / ~ " ' @ : +

  • & (使用 &)

  • * (符合 0 個或多個字元)

  • ? (確切符合 1 個字元)

如果通訊協定版本為 gRPC,則條件可能特定於套件、服務或方法。

HTTP 路徑模式範例
  • /img/*

  • /img/*/pics

gRPC 路徑模式範例
  • /package

  • /package.service

  • /package.service/method

路徑模式是用於路由請求,但不會修改請求。例如,如果規則具有 /img/* 的路徑模式,則該規則會將 /img/picture.jpg 的請求轉送到指定的目標群組,作為對 /img/picture.jpg 的請求。

範例 的範例路徑模式條件 AWS CLI

您可以在建立或修改規則時指定條件。如需詳細資訊,請參閱 create-rulemodify-rule 命令。下列條件是由包含指定字串的 URL 請求所滿足。

[ { "Field": "path-pattern", "PathPatternConfig": { "Values": ["/img/*"] } } ]

查詢字串條件

您可以使用查詢字串條件來設定規則,以根據查詢字串中的鍵值組或值來路由傳送請求。比對評估不區分大小寫。支援下列萬用字元:* (符合 0 個或多個字元) 和 ? (確切符合 1 個字元)。

範例 的範例查詢字串條件 AWS CLI

您可以在建立或修改規則時指定條件。如需詳細資訊,請參閱 create-rulemodify-rule 命令。當請求的查詢字串包含鍵值組 "version=v1" 或任何設為 "example" 的索引鍵時,即滿足下列條件。

[ { "Field": "query-string", "QueryStringConfig": { "Values": [ { "Key": "version", "Value": "v1" }, { "Value": "*example*" } ] } } ]

來源 IP 地址條件

您可以使用來源 IP 地址條件來設定規則,以根據請求的來源 IP 地址來路由傳送請求。IP 地址必須以 CIDR 格式指定。您可以使用 IPv4 和 IPv6 地址。不支援萬用字元。您無法為來源 IP 255.255.255.255/32 規則條件指定 CIDR。

如果用戶端位在 proxy 後方,則此為 proxy 的 IP 地址,而不是用戶端的 IP 地址。

X-Forwarded-For 標頭中的地址不符合此條件。若要搜尋 X-Forwarded-For 標頭中的地址,請使用 http-header條件。

範例 的範例來源 IP 條件 AWS CLI

您可以在建立或修改規則時指定條件。如需詳細資訊,請參閱 create-rulemodify-rule 命令。下列條件是由其中一個指定 CIDR 區塊中具有來源 IP 地址的請求所滿足。

[ { "Field": "source-ip", "SourceIpConfig": { "Values": ["192.0.2.0/24", "198.51.100.10/32"] } } ]

HTTP標頭和 Application Load Balancer

HTTP 請求和 HTTP 回應使用標頭欄位來傳送有關 HTTP 訊息的資訊。Word HTTP標頭會自動新增。標頭欄位是以冒號分隔的名稱值組,以歸位字元 (CR) 和換行 (LF) 分隔。HTTP 2616 訊息標頭中定義了一組標準 RFC 標頭欄位。 https://datatracker.ietf.org/doc/html/rfc2616也有非標準 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 屬性。此屬性可讓您在 Application Load Balancer 將請求傳送至目標之前,修改、保留或移除 HTTP 請求中的X-Forwarded-For標頭。此屬性的可能值為 appendpreserveremove。此屬性的預設值為 append

重要

由於可能存在安全風險,因此應謹慎使用 X-Forwarded-For 標頭。只有在由網路中適當保護的系統新增項目時,才能視為值得信任。

附加

Application Load Balancer 依預設會將用戶端的 IP 地址儲存在 X-Forwarded-For 請求標頭,並將標頭傳遞給伺服器。如果 X-Forwarded-For 請求標頭未包含在原始請求中,負載平衡器會以用戶端 IP 地址作為請求值建立請求標頭。否則,負載平衡器會將用戶端 IP 地址附加至現有的標頭,然後將標頭傳遞至您的伺服器。X-Forwarded-For 請求標頭可能包含以逗號分隔的多個 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 地址為 之用戶端的X-Forwarded-For請求標頭範例2001:DB8::21f:5bff:febf:ce22:8a2e

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且連接埠號碼為 之用戶端X-Forwarded-For的請求標頭範例8080

X-Forwarded-For: 12.34.56.78:8080

以下是 IPv6 地址為 2001:db8:85a3:8d3:1319:8a2e:370:7348且連接埠號碼為 之用戶端X-Forwarded-For的請求標頭範例8080

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 屬性選取 preserveremove,則 Application Load Balancer 會覆寫用戶端連接埠保留屬性。此屬性可將 X-Forwarded-For 標頭保持不變,或者根據您選取的模式將其移除,然後再將標頭傳送到目標。

下表顯示當您選取 appendpreserveremove 模式時,目標接收到的 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 不存在
請求會與具有多個用戶端 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. 在 EC2 開啟 Amazon https://console.aws.amazon.com/ec2/ 主控台。

  2. 在導覽窗格上選擇 Load Balancers (負載平衡器)

  3. 選取負載平衡器。

  4. 屬性索引標籤中,選擇編輯

  5. 流量組態區段的封包處理下,針對 X-Forwarded-For 標頭選擇附加 (預設)、保留移除

  6. 選擇 Save changes (儲存變更)。

若要修改、保留或移除 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

下列範例包含從用戶端發出作為 HTTPS X-Forwarded-Proto請求的請求的請求標頭:

X-Forwarded-Proto: https

X-Forwarded-Port

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