监听器规则的条件类型 - Elastic Load Balancing
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

监听器规则的条件类型

条件定义了传入请求必须满足的条件才能使监听器规则生效。如果请求符合规则的条件,则按照规则操作指定的方式处理该请求。每个规则条件都有类型和配置信息。应用程序负载均衡器支持以下监听器规则的条件类型。

条件类型
host-header

基于每个请求的主机名进行路由。有关更多信息,请参阅 主机条件

http-header

基于每个请求的 HTTP 标头进行路由。有关更多信息,请参阅 HTTP 标头条件

http-request-method

基于每个请求的 HTTP 请求方法路由。有关更多信息,请参阅 HTTP 请求方法条件

path-pattern

基于请求中的路径模式进行路由 URLs。有关更多信息,请参阅 路径条件

query-string

根据查询字符串中的 key/value 成对或值进行路由。有关更多信息,请参阅 查询字符串条件

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)。

演示

有关演示,请参阅高级请求路由

HTTP 标头条件

您可以使用 HTTP 标头条件来配置基于请求的 HTTP 标头路由请求的规则。您可以指定标准或自定义 HTTP 标头字段的名称。标头名称和匹配评估不区分大小写。比较字符串支持以下通配符:*(匹配 0 个或多个字符)和 ?(完全匹配 1 个字符)。标头名称不支持通配符。

启用 Applicat routing.http.drop_invalid_header_fields ion Load Balancer 属性后,它将删除不符合正则表达式的标头名称 (A-Z,a-z,0-9)。也可以添加不符合正则表达式的标头名称。

例 的 HTTP 标头条件示例 Amazon CLI

您可以在创建或修改规则时指定条件。有关更多信息,请参阅 create-rulemodify-rule 命令。具有与指定字符串之一匹配的 User-Agent 标头的请求满足以下条件。

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

HTTP 请求方法条件

您可以使用 HTTP 请求方法条件来配置基于请求的 HTTP 请求方法路由请求的规则。您可以指定标准或自定义 HTTP 方法。匹配评估区分大小写。不支持通配符;因此,方法名称必须完全匹配。

我们建议您以相同的方式路由 GET 和 HEAD 请求,因为这样可以缓存对 HEAD 请求的响应。

例 的 HTTP 方法条件示例 Amazon 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 不匹配。

例 的主机标头条件示例 Amazon 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 的请求转发给指定目标组。

例 的路径模式条件示例 Amazon CLI

您可以在创建或修改规则时指定条件。有关更多信息,请参阅 create-rulemodify-rule 命令。具有包含指定字符串的 URL 的请求满足以下条件。

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

查询字符串条件

您可以使用查询字符串条件来配置基于查询字符串中的 key/value 对或值路由请求的规则。匹配评估不区分大小写。支持以下通配符:*(匹配 0 个或多个字符)和 ?(完全匹配 1 个字符)。

例 的查询字符串条件示例 Amazon CLI

您可以在创建或修改规则时指定条件。有关更多信息,请参阅 create-rulemodify-rule 命令。使用包含一 key/value 对 “version=v1” 或任何设置为 “example” 的密钥的查询字符串的请求满足以下条件。

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

源 IP 地址条件

您可以使用源 IP 地址条件来配置基于请求的源 IP 地址路由请求的规则。必须以 CIDR 格式指定 IP 地址。您可以同时使用 IPv4 和 IPv6 地址。不支持通配符。不能为源 IP 规则条件指定 255.255.255.255/32 CIDR。

如果客户端位于代理之后,则这是代理的 IP 地址,而不是客户端的 IP 地址。

X-Forwarded-For标题中的地址不符合此条件。要在 X-Forwarded-For标题中搜索地址,请使用http-header条件。

例 的源 IP 条件示例 Amazon CLI

您可以在创建或修改规则时指定条件。有关更多信息,请参阅 create-rulemodify-rule 命令。源 IP 地址位于某个指定的 CIDR 块中的请求满足以下条件。

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