

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

# 為您的 Application Load Balancer 新增接聽程式規則
<a name="add-rule"></a>

您可以在建立接聽程式時定義預設規則。您可以隨時定義其他規則。每個規則都必須指定動作和條件，並且可以選擇指定轉換。如需詳細資訊，請參閱下列內容：
+ [動作類型](rule-action-types.md)
+ [條件類型](rule-condition-types.md)
+ [轉換](rule-transforms.md)

------
#### [ Console ]

**新增規則**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

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

1. 選取負載平衡器。

1. 在**接聽程式和規則**索引標籤上，選取**通訊協定：連接埠**資料欄中的文字，以開啟接聽程式的詳細資訊頁面。

1. 在**規則**索引標籤上選擇**新增規則**。

1. （選用） 若要指定規則的名稱，請展開**名稱和標籤**，然後輸入名稱。若要新增其他標籤，請選擇**新增其他標籤**，然後輸入標籤索引鍵和標籤值。

1. 針對每個條件，選擇**新增條件**，選擇條件類型，並提供必要的條件值：
   + **主機標頭** – 選取相符模式類型，然後輸入主機標頭。

     **值比對** – 最多 128 個字元。不區分大小寫。允許的字元有 a-z、A-Z、0-9，以及下列特殊字元：-\_.; 和萬用字元 (\* 和 ?)。您必須至少包含一個 "." 字元。您只可以在最後的 "." 字元之後包含字母字元。

     **Regex 比對** – 最多 128 個字元。
   + **路徑** – 選取比對模式類型，然後輸入路徑。

     **值比對** – 最多 128 個字元。區分大小寫。允許的字元有 a-z、A-Z、0-9，以及下列特殊字元：\_-.$/\~"'@:\+; &; 和萬用字元 (\* 和 ?)。

     **Regex 比對** – 最多 128 個字元。
   + **查詢字串** – 輸入 key：value 對，或不含 key 的值。

     最多 128 個字元。不區分大小寫。允許的字元有 a-z、A-Z、0-9，以及下列特殊字元： \_-.$/\~"'@:\+&()\!,;=; 和萬用字元 (\* 和 ?)。
   + **HTTP 請求方法** – 輸入 HTTP 請求方法。

     最多 40 個字元。區分大小寫。允許的字元有 A-Z 以及下列特殊字元：-\_。不支援萬用字元。
   + **HTTP 標頭** – 選取比對模式類型，然後輸入標頭的名稱和比較字串。
     + **HTTP 標頭名稱** – 規則會評估內含此標頭的請求，以確認相符值。

       **值比對** – 最多 40 個字元。不區分大小寫。允許的字元有 a-z、A-Z、0-9 以及下列特殊字元：\*?-\!\#$%&'\+.^\_`\|\~。不支援萬用字元。

       **Regex 比對** – 最多 128 個字元。
     + **HTTP 標頭值** – 輸入要與 HTTP 標頭值比較的字串。

       **值相符** 最多 128 個字元。不區分大小寫。允許的字元為 a-z、A-Z、0-9； 空格；下列特殊字元：！"\#$%&'()\+,./:;<=>@【】^\_`{\|}\~-； 和萬用字元 (\* 和 ？)。

       **Regex 比對** – 最多 128 個字元。
   + **來源 IP** – 以 CIDR 格式定義來源 IP 地址。IPv4 和 IPv6 CIDR 都是允許的。不支援萬用字元。

1. （選用） 若要新增轉換，請選擇**新增轉換**、選擇轉換類型，然後輸入要比對的規則運算式和替代字串。

1. （選用，僅限 HTTPS 接聽程式） 對於**預先路由動作**，選取下列其中一個動作：
   + **驗證使用者** – 選擇身分提供者並提供必要的資訊。如需詳細資訊，請參閱[使用 Application Load Balancer 來驗證使用者身分](listener-authenticate-users.md)。
   + **驗證字符** – 輸入 JWKS 端點、問題和任何其他宣告。如需詳細資訊，請參閱[使用 Application Load Balancer 驗證 JWTs](listener-verify-jwt.md)。

1. 針對**路由動作**，選取下列其中一個動作：
   + **轉送至目標群組** – 選擇目標群組。若要新增另一個目標群組，請選擇**新增目標群組**、選擇目標群組、檢閱相對權重，並視需要更新權重。如果您在任何目標群組上啟用粘性，則必須啟用群組層級粘性。
   + **重新導向至 URL** – 在 **URI 部分**索引標籤上分別輸入每個部分，或在完整 URL 索引標籤上輸入完整地址，以輸入 **URL**。針對**狀態碼**，根據您的需求選取暫時 (HTTP 302) 或永久 (HTTP 301)。
   + **傳回固定回應** – 輸入**回應碼**以針對捨棄的用戶端請求傳回。或者，您可以指定**內容類型**和**回應內文**。

1. 選擇**下一步**。

1. 針對 **Priority**，輸入 1-50，000 的值。規則會以從最低值到最高值的優先順序進行評估。

1. 選擇**下一步**。

1. 在 **Review and create** (檢閱和建立) 頁面上，選取 **Create** (建立)。

------
#### [ AWS CLI ]

**新增規則**  
使用 [create-rule](https://docs.aws.amazon.com/cli/latest/reference/elbv2/create-rule.html) 命令。

下列範例會建立具有 `forward`動作和 `host-header`條件的規則。

```
aws elbv2 create-rule \
    --listener-arn {{listener-arn}} \
    --priority {{10}} \
    --conditions "Field=host-header,Values={{example.com}},{{www.example.com}}" \
    --actions "Type=forward,TargetGroupArn={{target-group-arn}}"
```

若要建立在兩個目標群組之間分配流量的轉送動作，請改用下列`--actions`選項。

```
    --actions '[{
        "Type":"forward",
        "ForwardConfig":{
          "TargetGroups":[
            {"TargetGroupArn":"{{target-group-1-arn}}","Weight":{{50}}},
            {"TargetGroupArn":"{{target-group-2-arn}}","Weight":{{50}}}
          ]
        }
    }]'
```

下列範例會建立具有 `fixed-response`動作和 `source-ip`條件的規則。

```
aws elbv2 create-rule \
    --listener-arn {{listener-arn}} \
    --priority {{20}} \
    --conditions '[{"Field":"source-ip","SourceIpConfig":{"Values":["{{192.168.1.0/24}}","{{10.0.0.0/16}}"]}}]' \
    --actions "Type=fixed-response,FixedResponseConfig={StatusCode=403,ContentType=text/plain,MessageBody='{{Access denied}}'}"
```

下列範例會建立具有 `redirect`動作和 `http-header`條件的規則。

```
aws elbv2 create-rule \
    --listener-arn {{listener-arn}} \
    --priority {{30}} \
    --conditions '[{"Field":"http-header","HttpHeaderConfig":{"HttpHeaderName":"User-Agent","Values":["*Mobile*","*Android*","*iPhone*"]}}]' \
    --actions "Type=redirect,RedirectConfig={Host={{m.example.com}},StatusCode=HTTP_302}"
```

------
#### [ CloudFormation ]

**新增規則**  
定義 [AWS::ElasticLoadBalancingV2::ListenerRule](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-listenerrule.html) 類型的資源。

下列範例會建立具有 `forward`動作和 `host-header`條件的規則。符合條件時，規則會將流量傳送至指定的目標群組。

```
Resources:
    myForwardListenerRule:
     Type: 'AWS::ElasticLoadBalancingV2::ListenerRule'
     Properties:
       ListenerArn: !Ref myListener
       Priority: {{10}}
       Conditions:
         - Field: host-header
           Values:
             - {{example.com}}
             - {{www.example.com}}
       Actions:
         - Type: forward
           TargetGroupArn: !Ref myTargetGroup
```

或者，若要建立轉送動作，在滿足條件時在兩個目標群組之間分配流量，請定義 `Actions` ，如下所示。

```
       Actions:
         - Type: forward
           ForwardConfig:
             TargetGroups:
               - TargetGroupArn: !Ref TargetGroup1
                 Weight: {{50}}
               - TargetGroupArn: !Ref TargetGroup2
                 Weight: {{50}}
```

下列範例會建立具有 `fixed-response`動作和 `source-ip`條件的規則。

```
Resources:
    myFixedResponseListenerRule:
     Type: 'AWS::ElasticLoadBalancingV2::ListenerRule'
     Properties:
       ListenerArn: !Ref myListener
       Priority: {{20}}
       Conditions:
         - Field: source-ip
           SourceIpConfig:
             Values:
                - {{192.168.1.0/24}}
                - {{10.0.0.0/16}}
       Actions:
         - Type: fixed-response
           FixedResponseConfig:
             StatusCode: 403
             ContentType: text/plain
             MessageBody: "{{Access denied}}"
```

下列範例會建立具有 `redirect`動作和 `http-header`條件的規則。

```
Resources:
    myRedirectListenerRule:
     Type: 'AWS::ElasticLoadBalancingV2::ListenerRule'
     Properties:
       ListenerArn: !Ref myListener
       Priority: {{30}}
       Conditions:
         - Field: http-header
           HttpHeaderConfig:
             HttpHeaderName: User-Agent
             Values: 
               - "*Mobile*"
               - "*Android*"
               - "*iPhone*"
       Actions:
         - Type: redirect
           RedirectConfig:
             Host: {{m.example.com}}
             StatusCode: HTTP_302
```

------