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

对 Application Load Balancer 进行故障排除

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

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

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

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

安全组不允许流量

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

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

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

ping 路径不存在

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

连接超时

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

目标未返回成功响应代码

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

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

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

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

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

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

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

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

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

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

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

  • 如果您的应用程序负载均衡器关联了 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。

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 访问。

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。

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

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

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

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

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

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

HTTP 503:服务不可用

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

HTTP 504:网关超时

可能的原因:

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

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

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

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

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

HTTP 505:不支持版本

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

HTTP 561: 未授权

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

目标生成 HTTP 错误

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