本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Application Load Balancer
负载均衡器充当客户端的单一接触点。客户端向负载均衡器发送请求,负载均衡器将请求发送到目标,例如EC2实例。要配置您的负载均衡器,可以创建目标组,然后将目标注册到目标组。您还可以创建侦听器来检查来自客户端的连接请求,并创建侦听器规则以将来自客户端的请求路由到一个或多个目标组中的目标。
有关更多信息,请参阅 Elastic Load Balancing 用户指南中的 Elastic Load Balancing 工作原理
目录
您的负载均衡器的子网
创建应用程序负载均衡器时,您必须启用包含您的目标的区域。若要启用区域,请在区域中指定一个子网。弹性负载均衡在您指定的每个区域中创建一个负载均衡器节点。
注意事项
-
当您确保每个启用的区域均具有至少一个已注册目标时,负载均衡器是最有效的。
-
如果您在某区域中注册目标,但未启用该区域,这些已注册目标将无法从负载均衡器接收流量。
-
如果为负载均衡器启用多个区域,则这些区域的类型必须相同。例如,不能同时启用可用区和本地区域。
-
您可以指定已与您共享的子网。
应用程序负载均衡器支持以下类型的子网。
可用区子网
您必须至少选择两个可用区子网。以下限制适用:
-
每个子网都必须来自不同的可用区。
-
为确保您的负载均衡器能够正常扩展,请验证您的负载均衡器的每个可用区子网中是否有一个至少包含一个
/27
位掩码(例如10.0.0.0/27
)且每个子网至少有八个可用 IP 地址的CIDR块。这八个 IP 地址是允许负载均衡器在需要时进行横向扩展所必需的。您的负载均衡器将使用这些 IP 地址与目标建立连接。没有它们,应用程序负载均衡器在尝试更换节点时可能会遇到困难,从而导致其进入失败状态。注意:如果应用程序负载均衡器子网在尝试扩展时用尽可用的 IP 地址,则应用程序负载均衡器将在容量不足的情况下运行。在此期间,旧节点将继续为流量提供服务,但在尝试建立连接时,停滞的扩展尝试可能会导致 5xx 错误或超时。
本地区域子网
您可以指定一个或多个本地区域子网。以下限制适用:
-
您不能 AWS WAF 与负载均衡器一起使用。
-
您不能将 Lambda 函数用作目标。
-
您不能使用粘性会话或应用程序粘性。
Outpost 子网
您可以指定单个 Outpost 子网。以下限制适用:
-
您必须已在本地数据中心中安装并配置了 Outpost。Outpost 与其 AWS 区域之间必须具有可靠的网络连接。有关更多信息,请参阅 用户指南。AWS Outposts
-
负载均衡器需要在 Outpost 上为负载均衡器节点设置两个
large
实例。支持的实例类型见下表。负载均衡器可根据需要进行扩展,每次可将节点大小调整一个型号(从large
到xlarge
,然后从xlarge
到2xlarge
,然后从2xlarge
到4xlarge
)。将节点扩展到最大实例型号后,如果您还需要额外的容量,负载均衡器会添加4xlarge
实例以作为负载均衡器节点。如果您没有足够的实例容量或可用 IP 地址来扩展负载均衡器,负载均衡器将向 AWS Health Dashboard报告事件,并且负载均衡器状态为 active_impaired
。 -
您可以通过实例 ID 或 IP 地址注册目标。如果您在 AWS 区域内为前哨基地注册目标,则不会使用这些目标。
-
以下功能不可用:Lambda 函数作为目标、 AWS WAF 集成、粘性会话、身份验证支持以及与 AWS Global Accelerator的集成。
Application Load Balancer 可以在 Outpost 上的 c5/c5d、m5/m5d 或 r5/r5d 实例上部署。下表显示了负载均衡器可以在 Outpost 上使用的每种实例类型的大小和EBS容量:
实例类型和大小 | EBS音量 (GB) |
---|---|
c5/c5d | |
large | 50 |
xlarge | 50 |
2xlarge | 50 |
4xlarge | 100 |
m5/m5d | |
large | 50 |
xlarge | 50 |
2xlarge | 100 |
4xlarge | 100 |
r5/r5d | |
large | 50 |
xlarge | 100 |
2xlarge | 100 |
4xlarge | 100 |
负载均衡器安全组
安全组起到防火墙的作用,可控制允许往返于负载均衡器的流量。您可以选择端口和协议以允许入站和出站流量。
与负载均衡器关联的安全组的规则必须允许侦听器和运行状况检查端口上的双向流量。当您将侦听器添加到负载均衡器或更新目标组的运行状况检查端口时,您必须检查您的安全组规则,确保它们允许新端口上的双向流量。有关更多信息,请参阅 推荐的规则。
负载均衡器状态
负载均衡器可能处于下列状态之一:
provisioning
-
正在设置负载均衡器。
active
-
负载均衡器已完全设置并准备好路由流量。
active_impaired
-
负载均衡器正在路由流量,但没有扩展所需的资源。
failed
-
负载均衡器无法设置。
负载均衡器属性
以下是负载均衡器属性:
access_logs.s3.enabled
-
指示是否启用存储在 Amazon S3 中的访问日志。默认为
false
。 access_logs.s3.bucket
-
访问日志所用的 Amazon S3 存储桶的名称。如果启用访问日志,则此属性是必需的。有关更多信息,请参阅 启用访问日志。
access_logs.s3.prefix
-
Amazon S3 存储桶中位置的前缀。
client_keep_alive.seconds
-
客户端保持活动状态的值,以秒为单位。默认值为 3600 秒。
deletion_protection.enabled
-
指示是否启用删除保护。默认为
false
。 idle_timeout.timeout_seconds
-
空闲超时值 (以秒为单位)。默认值为 60 秒。
ipv6.deny_all_igw_traffic
-
阻止 Internet 网关 (IGW) 访问负载均衡器,防止通过 Internet 网关意外访问您的内部负载均衡器。对于面向互联网的负载均衡器,它设置为
false
;对于内部负载均衡器,它设置为true
。此属性不阻止非IGW互联网访问(例如,通过对等连接、Transit Gateway 或 AWS VPN)。 AWS Direct Connect routing.http.desync_mitigation_mode
-
确定负载均衡器如何处理可能对您的应用程序构成安全风险的请求。可能的值为
monitor
、defensive
和strictest
。默认为defensive
。 routing.http.drop_invalid_header_fields.enabled
-
表示负载均衡器 (
true
) 是移除带有无效标头字段的标HTTP头,还是路由到目标 (false
)。默认为false
。Elastic Load Balancing 要求有效的HTTP标头名称必须符合正则表达式[-A-Za-z0-9]+
,如HTTP字段名注册表中所述。每个名称都由字母数字字符或连字符组成。true
如果要从请求中删除不符合此模式的HTTP标头,请选择此选项。 routing.http.preserve_host_header.enabled
-
指示 Application Load Balancer 是否应保留HTTP请求中的
Host
标头,并在不做任何更改的情况下将其发送到目标。可能的值为true
和false
。默认为false
。 routing.http.x_amzn_tls_version_and_cipher_suite.enabled
-
表示在将客户端请求发送到目标之前,是否将包含有关协商TLS版本和密码套件信息的两个标头(
x-amzn-tls-version
和x-amzn-tls-cipher-suite
)添加到客户端请求中。标x-amzn-tls-version
头包含有关与客户端协商的TLS协议版本的信息,x-amzn-tls-cipher-suite
标头包含有关与客户端协商的密码套件的信息。两个标题均为 Open SSL 格式。属性的可能值为true
和false
。默认为false
。 routing.http.xff_client_port.enabled
-
指示
X-Forwarded-For
标头是否应保留客户端用于连接负载均衡器的源端口。可能的值为true
和false
。默认为false
。 routing.http.xff_header_processing.mode
-
使您能够在 Application Load Balancer 将HTTP请求发送到目标之前,修改、保留或删除请求中的
X-Forward-For
标头。可能的值为append
、preserve
和remove
。默认为append
。-
如果值为
append
,则 Application Load Balancer 在将请求发送到目标之前,会将客户端 IP 地址(最后一跳)添加到HTTP请求的X-Forward-For
标头中。 -
如果值为
preserve
,则 Application Load Balancer 会保留HTTP请求中的X-Forward-For
标头,并在不做任何更改的情况下将其发送到目标。 -
如果值为
remove
,则 Application Load Balancer 会在将HTTP请求中的X-Forward-For
标头发送到目标之前将其删除。
-
routing.http2.enabled
-
表示是否启用 HTTP /2。默认为
true
。 waf.fail_open.enabled
-
表示如果 AWS WAF启用了该功能的负载均衡器无法将请求转发到目标,则是否允许其将请求路由到 AWS WAF目标。可能的值为
true
和false
。默认为false
。
注意
引入该routing.http.drop_invalid_header_fields.enabled
属性是为了提供HTTP不同步保护。添加该routing.http.desync_mitigation_mode
属性是为了为您的应用程序提供更全面的保护,使其免受HTTP不同步的影响。您无需同时使用这两个属性,可以根据应用程序的要求选择其中一个。
IP 地址类型
您可以设置客户端可用于访问面向 Internet 和内部的负载均衡器的 IP 地址类型。
应用程序负载均衡器支持以下 IP 地址类型:
ipv4
-
客户端必须使用IPv4地址(例如 192.0.2.1)连接到负载均衡器
dualstack
-
客户端可以使用地址(例如 192.0.2.1)和IPv4IPv6地址(例如,2001:0 db 8:85 a 3:0:0:8 a2e:0370:7334)连接到负载均衡器。
注意事项
-
负载均衡器根据目标组的 IP 地址类型与目标进行通信。
-
当您为负载均衡器启用双堆栈模式时,Elastic Load Balancing 会为负载均衡器提供AAAADNS记录。使用IPv4地址与负载均衡器通信的客户端会解析 A DNS 记录。使用IPv6地址与负载均衡器通信的客户端会解析AAAADNS记录。
-
阻止通过互联网网关对内部双堆栈负载均衡器的访问,以防意外访问互联网。但是,这并不能阻止非IGW互联网访问(例如,通过对等连接、Transit Gateway 或 AWS VPN)。 AWS Direct Connect
-
dualstack-without-public-ipv4
-
客户端必须使用IPv6地址(例如,2001:0 db 8:85 a 3:0:0:8 a2e: 0370:7334)连接到负载均衡器。
注意事项
-
Application Load Balancer 身份验证仅IPv4在连接到身份提供商 (IdP) 或 Amazon Cognito 终端节点时支持。如果没有公共IPv4地址,负载均衡器就无法完成身份验证过程,从而导致 HTTP 500 个错误。
-
有关 IP 地址类型的更多信息,请参阅更新 Application Load Balancer 的 IP 地址类型。
负载平衡器连接
处理请求时,负载均衡器会维护两个连接:一个与客户端的连接和一个与目标的连接。负载均衡器和客户端之间的连接也称为前端连接。负载均衡器与目标之间的连接也称为后端连接。
跨可用区负载均衡
对于应用程序负载均衡器,默认情况下启用跨可用区负载均衡,无法在负载均衡器级别进行更改。有关更多信息,请参阅《Elastic Load Balancing 用户指南》中的跨可用区负载均衡。
可以在目标组级别关闭跨可用区负载均衡。有关更多信息,请参阅 关闭跨可用区负载均衡。
应用程序负载均衡器和 AWS WAF
您可以将 Application Load Balancer AWS WAF 与 Application Load Balancer 配合使用,根据网络访问控制列表 (WebACL) 中的规则允许或阻止请求。有关更多信息,请参阅《AWS WAF 开发者指南》ACLs中的使用 Web。
默认情况下,如果负载均衡器无法从中获得响应 AWS WAF,则会返回 HTTP 500 错误,并且不会转发请求。如果您需要负载均衡器即使无法联系目标也能将请求转发到目标 AWS WAF,则可以启用 AWS WAF 失效打开。要检查您的负载均衡器是否与集成 AWS WAF,请在中选择您的负载均衡器, AWS Management Console 然后选择集成服务选项卡。
预定义网页 ACLs
启用 AWS WAF 集成后,您可以选择使用预定义的规则自动创建新网站ACL。预定义的网络ACL包括三个 AWS 托管规则,可针对最常见的安全威胁提供保护。
-
AWSManagedRulesAmazonIpReputationList
-Amazon IP 信誉列表规则组会屏蔽通常与机器人或其他威胁相关的 IP 地址。有关更多信息,请参阅《AWS WAF 开发者指南》中的 Amazon IP 信誉列表托管规则组。 -
AWSManagedRulesCommonRuleSet
-核心规则集 (CRS) 规则组提供保护,防止利用各种漏洞,包括OWASP出版物(例如OWASP排名前十的漏洞)中描述的一些高风险漏洞和常见漏洞。有关更多信息,请参阅《AWS WAF 开发人员指南》中的核心规则集 (CRS) 托管规则组。 -
AWSManagedRulesKnownBadInputsRuleSet
-“已知错误输入” 规则组可阻止已知无效且与漏洞利用或发现相关的请求模式。有关更多信息,请参阅《AWS WAF 开发人员指南》中的已知错误输入托管规则组。
AWS WAF 使用控制台启用
打开亚马逊EC2控制台,网址为https://console.aws.amazon.com/ec2/
。 -
在导航窗格中,选择负载均衡器。
-
选择负载均衡器。
-
在集成选项卡上,展开 AWS Web 应用程序防火墙 (WAF),然后选择关联 WAF Web ACL。
-
在 “网页” 下ACL,选择 “自动创建预定义网页”ACL,或选择现有网页。ACL
-
在 “规则操作” 下,选择 “阻止” 或 “计数”。
-
选择确认。
要启用 AWS WAF 失效打开,请使用 AWS CLI
使用waf.fail_open.enabled
属性设置为的modify-load-balancer-attributes命令true
。
DNS名字
每个 Application Load Balancer 都会收到一个使用以下语法的默认域名系统 (DNS) 名称:name
-id
.elb。region
.amazonaws.com。例如, my-load-balancer-1234567890abcdef。elb.us-east-2.amazonaws.com。
如果您希望使用更易于记忆的DNS名称,则可以创建一个自定义域名并将其与 Application Load Balancer 的DNS名称相关联。当客户端使用此自定义域名发出请求时,DNS服务器会将其解析为 Application Load Balancer 的DNS名称。
首先,向经认可的域名注册商注册域名。接下来,使用您的DNS服务(例如域名注册商)创建DNS记录,将请求路由到您的 Application Load Balancer。有关更多信息,请参阅您的DNS服务文档。例如,如果您使用 Amazon Route 53 作为DNS服务,则会创建指向您的应用程序负载均衡器的别名记录。有关更多信息,请参阅 Amazon Route 53 开发人员指南中的将流量路由到ELB负载均衡器。
Application Load Balancer 的每个已启用的可用区都有一个 IP 地址。这些是 Application Load Balancer 节点的 IP 地址。Application Load Balancer 的DNS名称解析为这些地址。例如,假设您的 Application Load Balancer 的自定义域名是example.applicationloadbalancer.com
。使用以下nslookup命令dig或命令确定 Application Load Balancer 节点的 IP 地址。
Linux 或 Mac
$
dig +short
example.applicationloadbalancer.com
Windows
C:\>
nslookup
example.applicationloadbalancer.com
Application Load Balancer 有其节点的DNS记录。您可以使用具有以下语法的DNS名称来确定 Application Load Balancer 节点的 IP 地址:az
.name
-id
.elb。region
.amazonaws.com。
Linux 或 Mac
$
dig +short
us-east-2b.my-load-balancer-1234567890abcdef.elb.us-east-2.amazonaws.com
Windows
C:\>
nslookup
us-east-2b.my-load-balancer-1234567890abcdef.elb.us-east-2.amazonaws.com