

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

# 接聽程式規則的條件類型
<a name="rule-condition-types"></a>

條件定義傳入請求必須符合的條件，接聽程式規則才能生效。如果請求符合規則的條件，則會依規則的動作指定來處理請求。每個規則條件具有類型和組態資訊。Application Load Balancer 支援接聽程式規則的下列條件類型。條件類型

`host-header`  
根據每個請求的主機名稱來路由傳送。如需詳細資訊，請參閱[主機條件](#host-conditions)。

`http-header`  
根據每個請求的 HTTP 標頭來路由傳送。如需詳細資訊，請參閱[HTTP 標頭條件](#http-header-conditions)。

`http-request-method`  
根據每個請求的 HTTP 請求方法來路由傳送。如需詳細資訊，請參閱[HTTP 請求方法條件](#http-request-method-conditions)。

`path-pattern`  
根據請求 URL 中的路徑模式來路由傳送。如需詳細資訊，請參閱[路徑條件](#path-conditions)。

`query-string`  
根據查詢字串中的鍵值組或值來路由傳送。如需詳細資訊，請參閱[查詢字串條件](#query-string-conditions)。

`source-ip`  
根據每個請求的來源 IP 位址來路由傳送。如需詳細資訊，請參閱[來源 IP 地址條件](#source-ip-conditions)。

**條件基本概念**
+ 每個規則都可以選擇性地包含下列每個條件的零或其中一個：`host-header`、`path-pattern`、 `http-request-method`和 `source-ip`。每個規則也可以包含下列每個條件的零或多個： `http-header`和 `query-string`。
+ 透過 `host-header`、 `http-header`和 `path-pattern`條件，您可以使用值比對或規則表達式 (regex) 比對。
+ 每個條件最多可以指定三個比對評估。例如，對於每個 `http-header` 條件，您最多可以指定三個字串，以便與請求中的 HTTP 標頭值做比較。如果其中一個字串符合 HTTP 標頭的值，即符合條件。若要求所有字串都要符合，請為每個比對評估建立一個條件。
+ 每個規則最多可以指定五個比對評估。例如，您可以建立含有五個條件的規則，其中每個條件有一個比對評估。
+ 您可以在 `http-header`、`host-header`、`path-pattern` 和 `query-string` 條件的比對評估中包含萬用字元。每個規則以五個萬用字元為限。
+ 規則僅會套用至可見的 ASCII 字元；會排除控制字元 (0x00 到 0x1f 和 0x7f)。
+ 規則條件中使用的規則表達式不支援下列功能： lookaheads、 lookbehinds、backreferences、 atomic group、haative quantifiers、subroutines、recursion 和 Unicode 字元類別 （例如 `\p{L}`)。

**示範**  
如需示範，請參閱 [Advanced Request Routing](https://exampleloadbalancer.com/advanced_request_routing_demo.html)。

## 主機條件
<a name="host-conditions"></a>

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

主機名稱不區分大小寫，長度最多可達 128 個字元，而且可以包含下列任何字元：
+ A-Z、a-z、0-9
+ - .
+ \$1 (符合 0 個或多個字元)
+ ? (確切符合 1 個字元)

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

**主機名稱範例**
+ example.com
+ test.example.com
+ \$1.example.com

規則 \$1.example.com 會符合 test.example.com 但不會符合 example.com。

**Example 主機標頭條件範例**  
您可以在建立或修改規則時指定條件。如需詳細資訊，請參閱 [create-rule](https://docs.aws.amazon.com/cli/latest/reference/elbv2/create-rule.html) 和 [modify-rule](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-rule.html) 命令。  

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

```
[
  {
      "Field": "host-header",
      "HostHeaderConfig": {
          "RegexValues": ["^(.*)\\.example\\.com$"]
      }
  }
]
```

## HTTP 標頭條件
<a name="http-header-conditions"></a>

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

`routing.http.drop_invalid_header_fields` 啟用 Application Load Balancer 屬性時，它會捨棄不符合規則表達式 () 的標頭名稱`A-Z,a-z,0-9`。也可以新增不符合規則表達式的標頭名稱。

**Example HTTP 標頭條件範例**  
您可以在建立或修改規則時指定條件。如需詳細資訊，請參閱 [create-rule](https://docs.aws.amazon.com/cli/latest/reference/elbv2/create-rule.html) 和 [modify-rule](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-rule.html) 命令。當請求的 User-Agent 標頭符合其中一個指定的字串時，即滿足下列條件。  

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

```
[
  {
      "Field": "http-header",
      "HttpHeaderConfig": {
          "HttpHeaderName": "User-Agent",
          "RegexValues": [".+"]
      }
  }
]
```

## HTTP 請求方法條件
<a name="http-request-method-conditions"></a>

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

建議您以相同方式來路由傳送 GET 和 HEAD 請求，因為可快取對 HEAD 請求的回應。

**Example HTTP 方法條件範例**  
您可以在建立或修改規則時指定條件。如需詳細資訊，請參閱 [create-rule](https://docs.aws.amazon.com/cli/latest/reference/elbv2/create-rule.html) 和 [modify-rule](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-rule.html) 命令。使用指定方法的請求符合下列條件。  

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

## 路徑條件
<a name="path-conditions"></a>

您可以使用路徑條件來定義規則，以根據請求中的 URL 來路由傳送請求 (也稱為*以路徑為基礎的路由*)。

系統只會將路徑模式套用到 URL 的路徑，而不會套用到其查詢參數。它僅適用於可見的 ASCII 字符；會排除控制字符 (0x00 到 0x1f 和 0x7f)。

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

名稱模式區分大小寫，長度最多可達 128 個字元，而且可以包含下列任何字元。
+ A-Z、a-z、0-9
+ \$1 - . \$1 / \$1 " ' @ : \$1
+ & (使用 &amp;)
+ \$1 (符合 0 個或多個字元)
+ ? (確切符合 1 個字元)

如果通訊協定版本為 gRPC，則條件可以具體到套件、服務或方法。

**HTTP 路徑模式範例**
+ `/img/*`
+ `/img/*/pics`

**gRPC 路徑模式範例**
+ /package
+ /package.service
+ /package.service/method

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

**Example 路徑模式條件範例**  
您可以在建立或修改規則時指定條件。如需詳細資訊，請參閱 [create-rule](https://docs.aws.amazon.com/cli/latest/reference/elbv2/create-rule.html) 和 [modify-rule](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-rule.html) 命令。當請求的 URL 包含指定的字串時，即滿足下列條件。  

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

```
[
  {
      "Field": "path-pattern",
      "PathPatternConfig": {
          "RegexValues": ["^\\/api\\/(.*)$"]
      }
  }
]
```

## 查詢字串條件
<a name="query-string-conditions"></a>

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

**Example 查詢字串條件範例**  
您可以在建立或修改規則時指定條件。如需詳細資訊，請參閱 [create-rule](https://docs.aws.amazon.com/cli/latest/reference/elbv2/create-rule.html) 和 [modify-rule](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-rule.html) 命令。當請求的查詢字串包含鍵值組 "version=v1" 或任何設為 "example" 的索引鍵時，即滿足下列條件。  

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

## 來源 IP 地址條件
<a name="source-ip-conditions"></a>

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

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

X-Forwarded-For 標頭中的地址不滿足此條件。若要搜尋 X-Forwarded-For 標頭中的地址，請使用 `http-header` 條件。

**Example 來源 IP 條件範例**  
您可以在建立或修改規則時指定條件。如需詳細資訊，請參閱 [create-rule](https://docs.aws.amazon.com/cli/latest/reference/elbv2/create-rule.html) 和 [modify-rule](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-rule.html) 命令。當請求的來源 IP 地址出現在其中一個指定的 CIDR 區塊時，即滿足下列條件。  

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