编辑应用程序负载均衡器的属性 - Elastic Load Balancing
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

编辑应用程序负载均衡器的属性

创建应用程序负载均衡器后,您可以编辑其属性。

连接空闲超时

连接空闲超时是指在负载均衡器关闭连接之前,现有客户端或目标连接可以保持不活动状态(不发送或接收任何数据)的时间段。

为确保文件上传等耗时较长的操作有时间完成,请在每个空闲超时期限过去之前发送至少 1 字节的数据,并根据需要增加空闲超时期限的长度。此外,我们建议您将应用程序的空闲超时配置为大于负载均衡器的空闲超时的值。否则,如果应用程序不雅地关闭了与负载均衡器的TCP连接,则负载均衡器可能会在收到表明连接已关闭的数据包之前向应用程序发送请求。如果是这种情况,则负载均衡器会向客户端发送 HTTP 502 Bad Gateway 错误。

默认情况下,Elastic Load Balancing 将负载均衡器的空闲超时值设置为 60 秒(即 1 分钟)。使用以下过程设置不同的空闲超时值。

使用控制台更新连接空闲超时值
  1. 打开亚马逊EC2控制台,网址为https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择负载均衡器

  3. 选择负载均衡器。

  4. 属性选项卡上,选择编辑

  5. 流量配置下,输入连接空闲超时的值。有效范围是 1 至 4000 秒。

  6. 选择 Save changes(保存更改)

要更新空闲超时值,请使用 Amazon CLI

使用带有idle_timeout.timeout_seconds属性的modify-load-balancer-attributes命令。

HTTP客户机保持连接时长

HTTP客户端 keepalive 持续时间是 Application Load Balancer 与客户端保持持续HTTP连接的最长时间长度。配置的HTTP客户端 keepalive 持续时间过后,Application Load Balancer 再接受一个请求,然后返回一个响应,该响应会优雅地关闭连接。

负载均衡器发送的响应类型取决于客户端连接使用的HTTP版本。

  • 对于使用 HTTP 1.x 连接的客户端,负载均衡器会发送包含该字段Connection: close的HTTP标头。

  • 对于使用 HTTP /2 连接的客户端,负载均衡器会发送一个GOAWAY帧。

默认情况下,Application Load Balancer 将负载均衡器的HTTP客户端保持连接持续时间值设置为 3600 秒或 1 小时。HTTP客户端保持连接持续时间不能关闭,也不能将其设置为低于最小值 60 秒,但您可以将HTTP客户端保持连接持续时间增加到最长 604800 秒或 7 天。Application Load Balancer 从最初建立与HTTP客户端的HTTP连接时开始客户端保持连接的时段。持续时间在没有流量时会继续,并且在建立新连接之前不会重置。

当使用可用区转移或可用区自动转移将负载均衡器流量从受损的可用区转移出来时,具有现有开放连接的客户端可能会继续向受损位置发出请求,直到客户端重新连接。为了支持更快的恢复,请考虑设置较低的保持连接持续时间值,以限制客户端保持连接到负载均衡器的时间。有关更多信息,请参阅 Amazon 应用程序恢复控制器 (ARC) 开发人员指南中的限制客户端与您的终端节点保持连接的时间

注意

当负载均衡器将应用程序负载均衡器的 IP 地址类型切换为 dualstack-without-public-ipv4 时,负载均衡器会等待所有活动连接完成。要减少切换 Application Load Balancer 的 IP 地址类型所花费的时间,可以考虑降低HTTP客户端 keepalive 持续时间。

Application Load Balancer 在初始连接期间分配HTTP客户端保持连接持续时间值。更新HTTP客户端 keepalive 持续时间时,这可能会导致同时连接时具有不同的HTTP客户端 keepalive 持续时间值。现有连接保留在其初始连接期间应用的HTTP客户端 keepalive 持续时间值。新连接会收到更新的HTTP客户端 keepalive 持续时间值。

使用控制台更新客户端保持连接持续时间值
  1. 打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择负载均衡器

  3. 选择负载均衡器。

  4. 属性选项卡上,选择编辑

  5. 在 “流量配置” 下,输入HTTP客户端保持连接持续时间的值。有效范围是 60 至 604800 秒。

  6. 选择 Save changes(保存更改)

要更新客户端 keepalive 持续时间值,请使用 Amazon CLI

使用带有client_keep_alive.seconds属性的modify-load-balancer-attributes命令。

删除保护

为了防止您的负载均衡器被意外删除,您可以启用删除保护。默认情况下,已为负载均衡器禁用删除保护。

如果您为负载均衡器启用删除保护,则必须先禁用删除保护,然后才能删除负载均衡器。

使用控制台启用删除保护
  1. 打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择负载均衡器

  3. 选择负载均衡器。

  4. 属性选项卡上,选择编辑

  5. 配置下,打开删除保护

  6. 选择 Save changes(保存更改)

使用控制台禁用删除保护
  1. 打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择负载均衡器

  3. 选择负载均衡器。

  4. 属性选项卡上,选择编辑

  5. 配置页面下,关闭删除保护

  6. 选择 Save changes(保存更改)

要启用或禁用删除保护,请使用 Amazon CLI

使用带有deletion_protection.enabled属性的modify-load-balancer-attributes命令。

异步缓解模式

不同步缓解模式可保护您的应用程序免受因不同步而HTTP出现的问题。负载均衡器根据每个请求的威胁级别对请求进行分类,允许安全请求,然后根据您指定的缓解模式来减轻风险。异步缓解模式包括“监控”、“防御”和“最严格”。默认设置为防御模式,可在保持应用程序可用性的同时,提供持久的HTTP不同步缓解措施。您可以切换到最严格的模式,以确保您的应用程序仅接收符合 RFC7 230 的请求。

http_desync_guardian 库会分析请求以防止不同步攻击。HTTP HTTP有关更多信息,请参阅上的 Des HTTPync Guardian。 GitHub

分类

下面列出了这些分类。

  • 合规 — 请求符合 RFC 7230 标准,不构成任何已知的安全威胁。

  • 可接受-请求不符合 RFC 7230,但不构成已知的安全威胁。

  • 模棱两可 — Request 不符合 RFC 7230,但会带来风险,因为各种 Web 服务器和代理可能会以不同的方式处理它。

  • 严重 - 请求会带来很高的安全风险。负载均衡器会阻止请求,向客户端提供 400 响应,并关闭客户端连接。

如果请求不符合 RFC 7230,则负载均衡器会增加该DesyncMitigationMode_NonCompliant_Request_Count指标。有关更多信息,请参阅 Application Load Balancer 指标

每个请求的分类都包含在负载均衡器访问日志中。如果请求不符合,则访问日志将包含分类原因代码。有关更多信息,请参阅 分类原因

模式

下表描述 Application Load Balancer 如何根据模式和分类来处理请求。

分类。 监控模式 防御模式 最严格模式
合规 已允许 已允许 已允许
可接受 已允许 已允许 阻止
不明确 已允许 已允许¹ 阻止
严重 已允许 阻止 阻止

¹ 系统将路由请求,但关闭客户端和目标连接。如果您的负载均衡器在防御模式下收到大量不明确请求,则可能会产生额外费用。这是因为每秒新连接数量的增加会影响每小时使用的 Load Balancer 容量单位 (LCU)。您可以使用 NewConnectionCount 指标比较负载均衡器在监控模式和防御模式下建立新连接的方式。

使用控制台更新异步缓解模式
  1. 打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择负载均衡器

  3. 选择负载均衡器。

  4. 属性选项卡上,选择编辑

  5. 数据包处理下,对于 Desync 缓解模式,选择防御最严格监控

  6. 选择 Save changes(保存更改)

要更新不同步缓解模式,请使用 Amazon CLI

使用routing.http.desync_mitigation_mode属性设置为monitordefensive、或的modify-load-balancer-attributes命令strictest

主机标头保留

启用 “保留主机标头” 属性后,Application Load Balanc Host er 会在HTTP请求中保留标头,并在不进行任何修改的情况下将标头发送到目标。如果应用程序负载均衡器收到多个 Host 标头,它会保留所有这些标头。侦听器规则仅会应用于收到的第一个 Host 标头。

默认情况下,未启用 Preserve host header(保留主机标头)属性时,应用程序负载均衡器会通过以下方式修改 Host 标头:

未启用主机标头保留,且侦听器端口为非默认端口时:不使用默认端口(端口 80 或 443)时,如果客户端尚未附加端口号,我们会将端口号附加到主机标头中。例如,如果侦听器端口是非默认端口(例如)Host: www.example.com:8080,则HTTP请求中的Host标头Host: www.example.com将被修改为8080

未启用主机标头保留,并且侦听器端口为默认端口(端口 80 或 443)时:对于默认侦听器端口(端口 80 或 443),我们不会将端口号附加到传出的主机标头中。传入主机标头中已经存在的任何端口号都将被移除。

下表显示了应用程序负载均衡器如何根据侦听器端口处理HTTP请求中的主机标头的更多示例。

侦听器端口 示例请求 请求中的主机标头 已禁用主机标头保留(默认行为) 已启用主机标头保留
请求在默认HTTP/HTTPS监听器上发送。 GET /index.html HTTP/1.1 Host: example.com example.com example.com example.com
请求在默认HTTP监听器上发送,并且主机标头具有端口(例如 80 或 443)。 GET /index.html HTTP/1.1 Host: example.com:80 example.com:80 example.com example.com:80
请求具有绝对路径。 GET https://dns_name/index.html HTTP/1.1 Host: example.com example.com dns_name example.com
在非默认侦听器端口(例如 8080)上发送请求 GET /index.html HTTP/1.1 Host: example.com example.com example.com:8080 example.com
在非默认侦听器上发送请求,并且主机标头具有端口(例如 8080)。 GET /index.html HTTP/1.1 Host: example.com:8080 example.com:8080 example.com:8080 example.com:8080
使用控制台启用主机标头保留
  1. 打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择负载均衡器

  3. 选择负载均衡器。

  4. 属性选项卡上,选择编辑

  5. 数据包处理下,打开保留主机标头

  6. 选择 Save changes(保存更改)

要启用主机标头保留,请使用 Amazon CLI

使用routing.http.preserve_host_header.enabled属性设置为的modify-load-balancer-attributes命令true