对 Application Load Balancer 进行故障排除 - Elastic Load Balancing
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

对 Application Load Balancer 进行故障排除

以下信息可帮助您解决与 Application Load Balancer 相关的问题。

已注册目标未处于可用状态

如果目标进入 InService 状态所花费的时间超过预期,则该目标可能无法通过运行状况检查。您的目标未处于可用状态,除非通过一次运行状况检查。有关更多信息,请参阅 应用程序负载均衡器目标组的运行状况检查

确认您的实例未通过运行状况检查,然后检查以下问题:

安全组不允许流量

与实例关联的安全组必须允许来自负载均衡器的使用运行状况检查端口和运行状况检查协议的流量。您可以向实例安全组添加一个规则以允许来自负载均衡器安全组的所有流量。负载均衡器的安全组也必须允许流入实例的流量。

网络访问控制列表 (ACL) 不允许流量

与实例的子网关联的网络 ACL 必须允许运行状况检查端口上的入站流量,以及临时端口 (1024-65535) 上的出站流量。与您负载均衡器节点的子网关联的网络 ACL 必须允许临时端口上的入站流量,以及运行状况检查端口和临时端口上的出站流量。

ping 路径不存在

创建运行状况检查的目标页并将其路径指定为 ping 路径。

连接超时

首先,验证您是否能使用目标的私有 IP 地址和运行状况检查协议直接从网络中连接到目标。如果您无法连接,请检查实例是否被过度使用,并将多个目标添加到目标组 (如果它太忙而无法响应)。如果您可以连接,则在运行状况检查超时期限之前,目标页可能不会响应。为运行状况检查选择更简单的目标页,或者调整运行状况检查设置。

目标未返回成功响应代码

默认情况下,成功代码为 200,但您可以选择在配置运行状况检查时指定其他成功代码。确认负载均衡器所需的成功代码,并且应用程序已配置为在成功时返回这些代码。

目标响应代码格式错误或者连接到目标时出错

验证您的应用程序是否可以对负载均衡器的运行状况检查请求做出响应。某些应用程序需要进行额外配置才能对运行状况检查做出响应,例如只有进行虚拟主机配置才能对负载均衡器发送的 HTTP 主机标头做出响应。主机标头值包含目标的私有 IP 地址,后跟不使用默认端口时的运行状况检查端口。如果目标使用默认运行状况检查端口,则主机标头值仅包含目标的私有 IP 地址。例如,如果目标的私有 IP 地址为 10.0.0.10 且运行状况检查端口为 8080,则负载均衡器在运行状况检查中发送的 HTTP 主机标头为 Host: 10.0.0.10:8080。如果目标的私有 IP 地址为 10.0.0.10 且运行状况检查端口为 80,则负载均衡器在运行状况检查中发送的 HTTP 主机标头为 Host: 10.0.0.10。可能需要进行虚拟主机配置来响应该主机,或需要使用默认配置才能成功对应用程序进行运行状况检查。运行状况检查请求具有以下属性:将 User-Agent 设置为 ELB-HealthChecker/2.0,消息标头字段的行终止符为序列 CRLF,且标头在第一个空行处终止,后跟 CRLF。

客户端无法连接到面向 Internet 的负载均衡器

如果负载均衡器未响应请求,请检查以下问题:

您的面向 Internet 的负载均衡器已连接到私有子网

您必须为负载均衡器指定公有子网。公有子网有一个指向 Virtual Private Cloud (VPC) 的 Internet 网关的路由。

安全组或网络 ACL 不允许流量

负载均衡器的安全组和负载均衡器子网的任何网络 ACL 必须允许客户端侦听器端口上的入站流量和出站流量。

负载均衡器无法接收发送到自定义域的请求

如果负载均衡器无法接收发送到自定义域的请求,请检查以下问题:

自定义域名无法解析为负载均衡器 IP 地址
  • 使用命令行界面确认自定义域名解析为哪个 IP 地址。

    • Linux、macOS 或 Unix – 您可以在终端中使用 dig 命令。Ex.dig example.com

    • Windows – 您可以在命令提示符中使用 nslookup 命令。Ex.nslookup example.com

  • 使用命令行界面确认负载均衡器 DNS 解析为哪个 IP 地址。

  • 比较两个输出的结果。IP 地址必须匹配。

如果使用 Route 53 托管您的自定义域,请参阅《Amazon Route 53 开发人员指南》中的我的域在 Internet 上不可用

发送到负载均衡器的 HTTPS 请求返回“NET::ERR_CERT_COMMON_NAME_INVALID”

如果 HTTPS 请求收到来自负载均衡器的 NET::ERR_CERT_COMMON_NAME_INVALID,请查看以下可能的原因:

  • HTTPS 请求中使用的域名与 ACM 证书所关联的侦听器中指定的备用名称不匹配。

  • 正在使用负载均衡器的默认 DNS 名称。无法使用默认 DNS 名称发出 HTTPS 请求,因为无法为 *.amazonaws.com 域请求公有证书。

负载均衡器显示的处理时间较长

负载均衡器计算处理时间的方式因配置而异。

  • 如果您的应用程序负载均衡器关联了 Amazon WAF,并且客户端发送 HTTP POST 请求,则发送 POST 请求数据的时间将反映在负载均衡器访问日志的 request_processing_time 字段中。此行为对于 HTTP POST 请求是符合预期的。

  • 如果您的应用程序负载均衡器未关联 Amazon WAF,并且客户端发送 HTTP POST 请求,则发送 POST 请求数据的时间将反映在负载均衡器访问日志的 target_processing_time 字段中。此行为对于 HTTP POST 请求是符合预期的。

负载均衡器发送响应代码 000

使用 HTTP/2 连接时,如果任何标头的压缩长度超过 8K 字节,或者通过一个连接提供的请求数超过 10000,则负载均衡器将发送 GOAWAY 帧并使用 TCP FIN 关闭连接。

负载均衡器生成 HTTP 错误

以下 HTTP 错误由负载均衡器生成。负载均衡器将 HTTP 代码发送到客户端,将请求保存到访问日志并增加 HTTPCode_ELB_4XX_CountHTTPCode_ELB_5XX_Count 指标。

HTTP 400:错误请求

可能的原因:

  • 客户端发送的请求格式错误,不符合 HTTP 规范。

  • 请求标头超过了每个请求行 16K、单个标头 16K 或整个请求标头 64K 的限制。

  • 客户端在发送完整的请求正文之前关闭了连接。

HTTP 401: 未授权

您已将侦听器规则配置为对用户进行身份验证,但出现下列情况之一:

  • 已将 OnUnauthenticatedRequest 配置为拒绝未经身份验证的用户或 IdP 拒绝访问。

  • IdP 返回的声明大小超出了负载均衡器支持的最大大小。

  • 客户端提交了一个不带主机标头的 HTTP/1.0 请求,并且负载均衡器未能生成重定向 URL。

  • 请求的范围未返回 ID 令牌。

  • 您未在客户端登录超时到期之前完成登录过程。有关更多信息,请参阅客户端登录超时

HTTP 403:禁止访问

您已配置 Amazon WAF Web 访问控制列表 (Web ACL) 以监控发往您的 Application Load Balancer 的请求,并且它阻止了请求。

HTTP 405:不允许的方法

客户端使用 TRACE 方法,而 Application Load Balancer 不支持该方法。

HTTP 408:请求超时

客户端在空闲超时期到期前未发送数据。发送 TCP keep-alive 不会阻止此超时。在每个空闲超时期过去之前发送至少 1 个字节的数据。根据需要增加空闲超时期长度。

HTTP 413:有效负载过大

可能的原因:

  • 目标是 Lambda 函数,请求正文超过 1 MB。

  • 请求标头超过了每个请求行 16K、单个标头 16K 或整个请求标头 64K 的限制。

HTTP 414:URI 太长

请求 URL 或查询字符串参数过大。

HTTP 460

负载均衡器收到了来自客户端的请求,但客户端在空闲超时期限结束前就关闭了与负载均衡器的连接。

检查客户端超时期限是否超过负载均衡器的空闲超时期限。确保目标在客户端超时期限之前向客户端提供响应,或增加客户端超时期限以匹配负载均衡器空闲超时 (如果客户端支持这样做)。

HTTP 463

负载均衡器收到一个包含多个 IP 地址的 X-Forwarded-For 请求标头。IP 地址的上限为 30。

HTTP 464

负载均衡器收到一个与目标组协议的版本配置不兼容的传入请求协议。

可能的原因:

  • 请求协议是 HTTP/1.1,而目标组协议版本是 gRPC 或 HTTP/2。

  • 请求协议是 gRPC,而目标组协议版本是 HTTP/1.1。

  • 请求协议是 HTTP/2,请求不是 POST,而目标组协议版本是 gRPC。

HTTP 500:内部服务器错误

可能的原因:

  • 您配置了一个 Amazon WAF Web 访问控制列表 (web ACL),并且在执行 Web ACL 规则时出现了错误。

  • 负载均衡器无法与 IdP 令牌终端节点或 IdP 用户信息终端节点进行通信。

    • 确认 IdP 的 DNS 可公开解析。

    • 验证负载均衡器的安全组和 VPC 的网络 ACL 是否允许至这些终端节点的出站访问。

    • 验证您的 VPC 可以访问 Internet。如果您有面向内部的负载均衡器,请使用 NAT 网关启用 Internet 访问。

  • 从 IdP 收到的用户声明大小超过 11KB。

HTTP 501:未实现

负载均衡器收到具有不支持的值的 Transfer-Encoding 标头。Transfer-Encoding 支持的值为 chunkedidentity。作为替代方案,您可以使用 Content-Encoding 标头。

HTTP 502:无效网关

可能的原因:

  • 负载均衡器在尝试建立连接时从目标收到了 TCP RST。

  • 负载均衡器收到来自目标的意外响应,如当尝试建立连接时,收到“ICMP Destination unreachable (Host unreachable)”。检查是否允许来自负载均衡器子网的流量流至目标端口上的目标。

  • 当负载均衡器具有目标的未完成请求时,目标关闭了具有 TCP RST 或 TCP FIN 的连接。检查目标的保持活动状态持续时间是否短于负载均衡器的空闲超时值。

  • 目标响应格式错误,或者包含无效的 HTTP 标头。

  • 整个响应标头的目标响应标头超过了 32 K。

  • 对于已取消注册的目标正在处理的请求,取消注册延迟期已结束。增加延迟期,以便较长的操作能够完成。

  • 目标是 Lambda 函数,响应正文超过 1 MB。

  • 目标是一个 Lambda 函数,该函数在达到其配置的超时之前未响应。

  • 目标是一个返回错误的 Lambda 函数,或是受到 Lambda 服务限制的函数。

  • 负载均衡器在连接到目标时遇到 SSL 握手错误。

有关更多信息,请参阅 Amazon Support 知识中心中的如何解决应用程序负载均衡器 HTTP 502 错误

HTTP 503:服务不可用

负载均衡器的目标组没有已注册目标。

HTTP 504:网关超时

可能的原因:

  • 负载均衡器未能在连接超时到期 (10 秒) 之前建立与目标的连接。

  • 负载均衡器与目标建立了连接,但在空闲超时周期到期之前未响应。

  • 网络 ACL 或安全组策略不允许临时端口(1024-65535)上从目标到负载均衡器节点的流量。

  • 目标返回的 content-length 标头大于整个正文。负载均衡器因等待缺少的字节而超时。

  • 目标是 Lambda 函数,并且 Lambda 服务在连接超时过期之前没有响应。

  • 负载均衡器在连接到目标时遇到 SSL 握手超时(10 秒)。

HTTP 505:不支持版本

负载均衡器收到一个意外的 HTTP 版本请求。例如,负载均衡器建立了 HTTP/1 连接,但收到了 HTTP/2 请求。

HTTP 507:存储空间不足

重定向 URL 过长。

HTTP 561: 未授权

已配置侦听器规则以验证用户的身份,但在验证用户身份时,IdP 返回错误代码。查看访问日志以获取相关的错误原因代码

目标生成 HTTP 错误

负载均衡器将有效的 HTTP 响应从目标转发到客户端,包括 HTTP 错误。目标生成的 HTTP 错误记录在 HTTPCode_Target_4XX_CountHTTPCode_Target_5XX_Count 指标中。

Amazon Certificate Manager 证书不可用

当决定在应用程序负载均衡器中使用 HTTPS 侦听器时,Amazon Certificate Manager 会在颁发证书之前要求您验证域所有权。如果在安装过程中错过了此步骤,则证书将保持 Pending Validation 状态,直到验证后才能使用。

  • 如果使用电子邮件验证,请参阅《Amazon Certificate Manager 用户指南》中的电子邮件验证

  • 如果使用 DNS 验证,请参阅《Amazon Certificate Manager 用户指南》中的 DNS 验证

不支持多行标头

应用程序负载均衡器不支持多行标头,包括 message/http 媒体类型标头。如果提供了多行标头,应用程序负载均衡器会在将其传递给目标之前附加冒号字符“:”。

使用资源地图排查不正常目标的问题

如果您的应用程序负载均衡器目标未通过运行状况检查,则可以使用资源地图来查找不正常目标并根据失败原因代码采取措施。有关更多信息,请参阅 查看应用程序负载均衡器资源地图

资源地图提供了两个视图:概述不正常目标地图。默认情况下,概述处于选中状态,并显示您的负载均衡器的所有资源。选择不正常目标地图视图将仅显示与应用程序负载均衡器关联的每个目标组中的不正常目标。

注意

必须启用显示资源详细信息才能查看资源地图中所有适用资源的运行状况检查摘要和错误消息。未启用时,您必须选择每个资源才能查看其详细信息。

目标组列显示每个目标组的正常目标和不正常目标的摘要。这可以帮助确定是所有目标都未通过运行状况检查,还是只有特定目标未通过运行状况检查。如果目标组中的所有目标均未通过运行状况检查,请检查目标组的配置。选择目标组名称以在新选项卡中打开其详细信息页面。

目标列显示每个目标的目标 ID 和当前运行状况检查状态。当目标运行状况不佳时,将显示运行状况检查失败原因代码。当单个目标未通过运行状况检查时,请验证目标是否有足够的资源,并确认目标上运行的应用程序是否可用。选择一个目标 ID 以将在新选项卡中打开其详细信息页面。

选择导出后,您可以选择将应用程序负载均衡器资源地图的当前视图导出为 PDF。

验证您的实例是否未通过运行状况检查,然后根据失败原因代码检查是否存在以下问题:

  • 不正常:HTTP 响应不匹配

    • 验证目标上运行的应用程序是否正在向应用程序负载均衡器的运行状况检查请求发送正确的 HTTP 响应。

    • 或者,您可以更新应用程序负载均衡器的运行状况检查请求,以匹配目标上运行的应用程序的响应。

  • 不正常:请求超时

    • 验证与您的目标和应用程序负载均衡器关联的安全组和网络访问控制列表(ACL)未阻止连接。

    • 验证目标是否具有足够的资源来接受来自应用程序负载均衡器的连接。

    • 验证目标上运行的任何应用程序的状态。

    • 可以在每个目标的应用程序日志中查看应用程序负载均衡器的运行状况检查响应。有关更多信息,请参阅 Health check reason codes

  • 不正常:FailedHealthChecks

    • 验证目标上运行的任何应用程序的状态。

    • 验证目标是否在侦听运行状况检查端口上的流量。

      使用 HTTPS 侦听器时

      您可以选择用于前端连接的安全策略。用于后端连接的安全策略是根据正在使用的前端安全策略自动选择的。

      • 如果您的 HTTPS 侦听器对前端连接使用 TLS 1.3 安全策略,则 ELBSecurityPolicy-TLS13-1-0-2021-06 安全策略将用于后端连接。

      • 如果您的 HTTPS 侦听器未对前端连接使用 TLS 1.3 安全策略,则 ELBSecurityPolicy-2016-08 安全策略将用于后端连接。

      有关更多信息,请参阅 Security policies

    • 验证目标是否按照安全策略指定的正确格式提供服务器证书和密钥。

    • 验证目标是否支持一个或多个匹配的密码,以及应用程序负载均衡器提供的用于建立 TLS 握手的协议。