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

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

监听器规则的操作类型

操作决定了当满足侦听器规则的条件时,负载均衡器如何处理请求。每条规则必须至少有一个操作来指定如何处理匹配的请求。每个规则操作都有类型和配置信息。应用程序负载均衡器支持监听器规则的以下操作类型。

操作类型
authenticate-cognito

[HTTPS 侦听器] 使用 Amazon Cognito 验证用户身份。有关更多信息,请参阅 配置用户身份验证

authenticate-oidc

[HTTPS 侦听器] 使用符合 OpenID Connect (OIDC) 条件的身份提供商验证用户身份。有关更多信息,请参阅 配置用户身份验证

fixed-response

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

forward

将请求转发到指定目标组。有关更多信息,请参阅 转发操作

redirect

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

动作基础知识
  • 每条规则必须恰好包含以下路由操作之一:forwardredirectfixed-response、或,并且必须是最后要执行的操作。

  • HTTPS 侦听器可以有包含用户身份验证操作和路由操作的规则。

  • 当有多个操作时,优先级最低的操作将首先执行。

  • 如果协议版本是 gRPC 或 HTTP/2,则唯一支持的操作是 forward 操作。

固定响应操作

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

采取 fixed-response 操作时,操作和重定向目标的 URL 记录在访问日志中。有关更多信息,请参阅 访问日志条目。成功 fixed-response 操作的计数在 HTTP_Fixed_Response_Count 指标中报告。有关更多信息,请参阅 Application Load Balancer 指标

例 的固定响应操作示例 Amazon CLI

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

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

转发操作

forward 操作会将请求路由至其目标组。在添加 forward 操作之前,请创建目标组并向其添加目标。有关更多信息,请参阅 为您的应用程序负载均衡器创建目标组

如果为某个 forward 操作指定多个目标组,您必须为每个目标组指定权重。每个目标组权重都是一个介于 0 到 999 之间的值。对于将侦听器规则与加权目标组匹配的请求,会根据这些目标组的权重分配给这些目标组。例如,如果指定两个目标组,每个目标组的权重为 10,则每个目标组将接收一半的请求。如果指定两个目标组,一个权重为 10,另一个权重为 20,则权重为 20 的目标组接收的请求将是另一个目标组的两倍。

如果您配置规则以在加权目标组之间分配流量,并且其中一个目标组为空或只有不健康的目标,则负载均衡器不会自动故障转移到目标运行状况良好的目标组。

默认情况下,配置规则以便在加权目标组之间分配流量时,并不能保证支持粘性会话。为了确保支持粘性会话,请为规则启用目标组粘性。当负载均衡器首次将请求路由到加权目标组时,它会生成一个名为的 Cookie AWSALBTG ,用于对有关选定目标组的信息进行编码,对 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

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

协议

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

hostname

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

port (远程调试端口)

端口(1 到 65535)。

path

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

查询

查询参数。最大长度为 128 个字符。

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

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

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

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

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

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

执行 redirect 操作时,操作记录在访问日志中。有关更多信息,请参阅 访问日志条目。成功 redirect 操作的计数在 HTTP_Redirect_Count 指标中报告。有关更多信息,请参阅 Application Load Balancer 指标

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

以下规则设置永久重定向到一个 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} 关键字来创建修改的路径。
例 的重定向操作示例 Amazon CLI

您可以在创建或修改规则时指定操作。有关更多信息,请参阅 create-rulemodify-rule 命令。以下操作将 HTTP 请求重定向为端口 443 上的 HTTPS 请求,其主机名、路径和查询字符串与 HTTP 请求相同。

[ { "Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "Host": "#{host}", "Path": "/#{path}", "Query": "#{query}", "StatusCode": "HTTP_301" } } ]