Elastic Load Balancing
Application Load Balancer
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

应用程序负载均衡器的侦听器

在开始使用 应用程序负载均衡器 之前,您必须添加一个或多个侦听器。侦听器是一个使用您配置的协议和端口检查连接请求的进程。为侦听器定义的规则可以确定负载均衡器将请求路由到一个或多个目标组中的目标的方式。

侦听器配置

侦听器支持以下协议和端口:

  • 协议:HTTP、HTTPS

  • 端口:1-65535

可以使用 HTTPS 侦听器将加密和解密的工作交给负载均衡器完成,以便应用程序可以专注于其业务逻辑。如果侦听器协议为 HTTPS,您必须在侦听器上部署至少一个 SSL 服务器证书。有关更多信息,请参阅 为您的应用程序负载均衡器创建 HTTPS 侦听器

Application Load Balancer 为 WebSockets 提供本机支持。您可以对 HTTP 和 HTTPS 侦听器同时使用 WebSocket。

Application Load Balancer 为将 HTTP/2 与 HTTPS 侦听器一起使用提供本机支持。使用一个 HTTP/2 连接最多可以并行发送 128 个请求。负载均衡器将这些请求转换为单独的 HTTP/1.1 请求,并将它们分配给目标组中的正常目标。由于 HTTP/2 可以更高效地使用前端连接,您可能注意到客户端与负载均衡器之间的连接较少。无法使用 HTTP/2 的服务器推送功能。

有关更多信息,请参阅 Elastic Load Balancing 用户指南 中的请求路由

侦听器规则

每个侦听器都具有默认规则,您也可以选择定义其他规则。每条规则由优先级、一个或多个操作以及一个或多个条件组成。您可以随时添加或编辑规则。有关更多信息,请参阅 编辑规则

默认规则

创建侦听器时,请为默认规则定义操作。默认规则不能有条件。如果未满足侦听器的任一规则条件,则将执行默认规则的操作。

下面是控制台中所示的默认规则的示例:


                    侦听器的默认规则。

规则优先级

每个规则都有一个优先级。规则是按优先级顺序 (从最低值到最高值) 计算的。最后评估默认规则。您可以随时更改非默认规则的优先级。您不能更改默认规则的优先级。有关更多信息,请参阅 重新排序规则

规则操作

每个规则操作都具有执行操作所需的类型、顺序和信息。有关更多信息,请参阅 规则操作类型

规则条件

每个规则条件都有类型和配置信息。当规则的条件满足时,将执行其操作。有关更多信息,请参阅 规则条件类型

规则操作类型

以下是规则支持的操作类型:

authenticate-cognito

[HTTPS 侦听器] 使用 Amazon Cognito 验证用户身份。有关更多信息,请参阅 使用应用程序负载均衡器验证用户身份

authenticate-oidc

[HTTPS 侦听器] 使用符合 OpenID Connect (OIDC) 条件的身份提供商验证用户身份。

fixed-response

返回自定义 HTTP 响应。有关更多信息,请参阅 固定响应操作

forward

将请求转发到指定目标组。

redirect

将请求从一个 URL 重定向到另一个。有关更多信息,请参阅重定向操作

先执行顺序值最小的操作。每条规则必须包含以下操作之一:forwardredirectfixed-response,并且其必须为要执行的最后一个操作。

固定响应操作

您可以使用 fixed-response 操作删除客户端请求并返回自定义 HTTP 响应。您可以使用此操作返回 2XX、4XX 或 5XX 响应代码和可选的消息。

采取 fixed-response 操作时,操作和重定向目标的 URL 记录在访问日志中。有关更多信息,请参阅 访问日志条目。成功 fixed-response 操作的计数在 HTTP_Fixed_Response_Count 指标中报告。有关更多信息,请参阅应用程序负载均衡器 指标

例 AWS CLI 固定响应操作示例

您可以在创建或修改规则时指定操作。有关更多信息,请参阅 create-rulemodify-rule 命令。以下操作发送具有指定状态代码和消息正文的固定响应。

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

转发操作

您可以使用 forward 操作将请求路由到指定的目标组。

例 AWS CLI 转发操作示例

您可以在创建或修改规则时指定操作。有关更多信息,请参阅 create-rulemodify-rule 命令。以下操作将请求转发到指定的目标组。

[ { "Type": "forward", "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a06" } ]

重定向操作

您可以使用 redirect 操作将客户端请求从一个 URL 重定向到另一个。根据需要,您可以将重定向配置为临时 (HTTP 302) 或永久 (HTTP 301)。

URI 包括以下组成部分:

protocol://hostname:port/path?query

您必须修改以下至少一个组成部分以避免重定向循环:协议、主机名、用户名、端口或路径。未修改的任何组成部分将保留其原始值。

protocol

协议(HTTP 或 HTTPS)。您可以将 HTTP 重定向到 HTTP、将 HTTP 重定向到 HTTPS 以及将 HTTPS 重定向到 HTTPS。不能将 HTTPS 重定向到 HTTP。

hostname

主机名。主机名不区分大小写,长度最多为 128 个字符,由字母数字字符、通配符(* 和 ?)及连字符 (-) 组成。

port (远程调试端口)

端口(1 到 65535)。

path

绝对路径,以前导“/”开头。路径区分大小写,长度最多为 128 个字符,由字母数字字符、通配符(* 和 ?)、&(使用 &)及以下特殊字符组成:_-.$/~"'@:+。

query

查询参数。

您可以通过以下保留关键字,在目标 URL 中重用原始 URL 的 URI 组成部分:

  • #{protocol} – 保留协议。在协议和查询组成部分中使用

  • #{host} – 保留域。在主机名、路径和查询组成部分中使用

  • #{port} – 保留端口。在端口、路径和查询组成部分中使用

  • #{path} – 保留路径。在路径和查询组成部分中使用

  • #{query} – 保留查询参数。在查询组成部分中使用

执行 redirect 操作时,操作记录在访问日志中。有关更多信息,请参阅 访问日志条目。成功 redirect 操作的计数在 HTTP_Redirect_Count 指标中报告。有关更多信息,请参阅应用程序负载均衡器 指标

例 使用控制台的重定向操作的示例

以下规则设置永久重定向到一个 URL,该 URL 使用 HTTPS 协议和指定的端口 (40443),但保留原始主机名、路径和查询参数。此屏幕等同于“https://#{host}:40443/#{path}?#{query}”。


                        将请求重定向到一个 URL 的规则,该 URL 使用 HTTPS 协议和指定的端口 (40443),但保留原始域、路径和原始 URL 的查询参数。

以下规则设置永久重定向到一个 URL,该 URL 包含原始协议、端口、主机名和查询参数,并使用 #{path} 关键字来创建修改的路径。此屏幕等同于“#{protocol}://#{host}:#{port}/new/#{path}?#{query}”。


                        将请求重定向到一个 URL 的规则,该 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

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

query-string

基于查询字符串中的键/值对或值进行路由。有关更多信息,请参阅 查询字符串条件

source-ip

基于每个请求的源 IP 地址进行路由。有关更多信息,请参阅 源 IP 地址条件

每条规则可以包括以下条件中的零个或一个:host-headerhttp-request-methodpath-patternsource-ip,以及以下条件中的零个或多个:http-headerquery-string

您可以为每个条件指定最多三个匹配评估。例如,对于每个 http-header 条件,您最多可以指定三个字符串,以与请求中的 HTTP 标头的值进行比较。如果其中一个字符串与 HTTP 标头的值匹配,则满足条件。若要要求所有字符串都匹配,请为每个匹配评估创建一个条件。

您可以为每条规则指定最多五个匹配评估。例如,您可以创建一个具有五个条件的规则,其中每个条件都有一个匹配评估。

您可以在 http-headerhost-headerpath-patternquery-string 条件的匹配评估中包含通配符。每条规则的通配符上限为五个。

HTTP 标头条件

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

例 AWS CLI HTTP 标头条件示例

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

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

HTTP 请求方法条件

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

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

例 AWS CLI HTTP 方法条件示例

您可以在创建或修改规则时指定条件。有关更多信息,请参阅 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.comtest.example.com 匹配,但与 example.com 不匹配。

例 AWS CLI 主机标头条件示例

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

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

路径条件

您可以使用路径条件来定义基于请求中的 URL 路由请求的规则(也称为基于路径的路由)。

路径模式仅应用于 URL 的路径,而不应用于其查询参数。

路径模式区分大小写,长度最多为 128 个字符,并且可包含以下任何字符。

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

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

  • &(使用 &)

  • *(匹配 0 个或多个字符)

  • ?(完全匹配 1 个字符)

示例路径模式

  • /img/*

  • /js/*

路径模式用于路由请求,而不是更改请求。例如,如果一个规则具有路径模式 /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 地址路由请求的规则。必须以 CIDR 格式指定 IP 地址。可以使用 IPv4 和 IPv6 地址。不支持通配符。

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

X-Forwarded-For 标头中的地址不满足此条件。要搜索 X-Forwarded-For 标头中的地址,请使用 http-header 条件。

例 AWS CLI 源 IP 条件示例

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

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