接聽程式規則的動作類型 - Elastic Load Balancing

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

接聽程式規則的動作類型

動作會決定當符合接聽程式規則的條件時,負載平衡器如何處理請求。每個規則必須至少有一個動作,指定如何處理相符的請求。每個規則動作都有類型和組態資訊。Application Load Balancer 支援接聽程式規則的下列動作類型。

動作類型
authenticate-cognito

[HTTPS 接聽程式] 使用 Amazon Cognito 來驗證使用者身分。如需詳細資訊,請參閱設定使用者身分驗證

authenticate-oidc

[HTTPS 接聽程式] 使用與 OpenID Connect (OIDC) 相容的身分提供者來驗證使用者。如需詳細資訊,請參閱設定使用者身分驗證

fixed-response

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

forward

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

redirect

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

動作基本概念
  • 每個規則必須僅包含下列其中一個路由動作:forwardredirectfixed-response,而且必須是要執行的最後一個動作。

  • HTTPS 接聽程式可以具有具有使用者身分驗證動作和路由動作的規則。

  • 有多個動作時,會先執行優先順序最低的動作。

  • 如果通訊協定版本為 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 動作之前,請建立目標群組並將目標新增至群組。如需詳細資訊,請參閱為您的 Application Load Balancer 建立目標群組

如果您為一個 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 重新導向到另一個 URL。您可以根據您的需求,將重新導向設定為暫時 (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 中重複使用原始 URL 的 URI 元件:

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

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

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

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

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

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

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

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

一個規則,使用 HTTPS 通訊協定和指定連接埠 (40443) 將請求重新導向到 URL,但會保留原始 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" } } ]