CLB状态码说明

本文为您介绍CLB常用状态码的说明及可能原因。在遇到CLB返回异常状态码时,您可以根据状态码的可能原因排查问题。

收到异常状态码时,请您关注访问日志中状态码(status)和后端状态码(upstream_status)。如果两者相同,很可能是由于直接透传后端状态码导致的,建议优先排查后端服务器返回状态码的原因;如果只有状态码(status),则可能是由于客户端访问异常导致的。

说明

CLB支持开启访问日志,开启该功能后,可以帮助您更快地定位问题。关于如何开启访问日志,请参见配置访问日志

400(Bad Request)

HTTP请求格式异常。

后端状态码(upstream_status)的可能原因:

  • CLB访问后端服务器时使用HTTP协议,而后端服务器使用HTTPS协议。建议您选择以下方式解决:

    • 后端服务器使用HTTP协议。

    • 使用应用型负载均衡ALB产品,并创建后端协议为HTTPS的服务器组。具体操作,请参见创建和管理服务器组

  • CLB通过了对报文的校验,但后端服务器有特殊的报文校验逻辑。建议排查后端服务器报文校验失败的原因。

CLB状态码(status)的可能原因:

  • 后端服务器直接返回400,CLB透传后端状态码给客户端。建议排查后端状态码返回400的原因。

  • 客户端发起的请求HTTP头部格式错误,例如content length与请求body长度不一致、请求方法未大写、通过HTTP协议访问了HTTPS服务等。建议在客户端抓包分析HTTP请求的格式,并和正常的请求进行比较。

  • CLB实例添加了HTTPS监听,当客户端发送的请求不是HTTPS请求且返回400状态码时,建议排查客户端是否有将HTTP请求发送至HTTPS端口。

  • 在HTTP请求发送完成前,客户端主动关闭连接,建议抓包排查客户端断连原因。

  • CLB要求每个HTTP header最大不超过32 K B,超 过该限 制会返回400状态码,建议调整HTTP头部或标头长度。

405(Method not allowed)

请求方法不支持。

后端状态码(upstream_status)的可能原因:后端服务器不支持客户端请求使用的方法,建议排查客户端使用方法和后端服务器的方法是否匹配。例如,在后端服务器直接测试是否支持特定的method,使用curl -X method ip:port命令排查,其中,method为客户端请求使用的方法,ip为后端服务器的IP地址,port为后端服务器的端口。

CLB状态码(status)的可能原因

  • CLB本身不支持TRACE请求方法,建议使用其他方法替换。

  • 后端服务器直接返回405,CLB透传状态码给客户端。建议排查后端状态码返回405的原因。

408(Request Timeout)

请求超时,CLB主动断开连接。

CLB状态码(status)的可能原因

  • 在连接请求超时时间内,客户端只传输了部分数据(例如只有HTTP header而没有body),CLB主动断开连接。建议抓包排查客户端是否存在性能瓶颈或存在其他异常行为。您也可以通过调大CLB监听的连接请求超时时间,观察是否可以解决该问题。更多信息,请参见负载均衡服务FAQ

  • 客户端到的CLB网络链路有问题,TCP的rtt(Round Trip Time)比较大或存在丢包等问题,建议排查访问日志的request_time和tcpinfo_rtt字段或抓包排查客户端网络是否有异常。

  • 访问CLB实例的流量太大,触发带宽限速和丢包,建议通过云监控排查实例的出带宽和丢弃连接数指标。更多信息,请参见查看CLB监控信息

414(URI too long)

客户端请求的URI长度超过了后端服务器能够解析的长度,因此CLB拒绝对该请求提供服务。

后端状态码(upstream_status)的可能原因:后端服务直接返回414时,建议您选择以下方式解决:

  • 缩短URI长度,可采用POST传输数据。

  • 调大后端服务器对客户端请求URI的长度限制。

CLB状态码(status)的可能原因

  • 后端服务器直接返回414,CLB透传后端状态码给客户端。建议排查后端服务器返回414的原因。

  • 访问CLB请求的URI长度限制为32 KB,超过32 KB会返回414状态码。建议缩短URI长度,如果数据量很大建议采用POST传输数据。

499(Client Close Reqeust)

客户端主动断开连接。

CLB状态码(status)的可能原因

  • 客户端到CLB的网络链路有问题,存在rtt(Round Trip Time)比较大或丢包等问题,建议排查访问日志的request_time和tcpinfo_rtt字段,或抓包排查客户端网络是否有异常。

  • 访问CLB实例的流量太大,触发带宽限速丢包,建议通过云监控排查实例的出带宽和丢弃连接数指标。更多信息,请参见查看CLB监控信息

  • 后端处理请求时间太长,超过了客户端的请求超时时间。访问日志中的upstream_response_time代表后端处理请求的时间,建议排查后端服务器的CPU、内存、网络是否存在性能瓶颈。

  • 客户端设置的请求超时时间太短,导致客户端未发送完HTTP请求就因为请求超时关闭了连接。建议排查访问日志中的request_time字段,该字段代表客户端请求的总时间,参考该字段的值设置合理的客户端请求超时时间。

  • 客户端遇到未知问题,在未完成HTTP请求的情况下,提前关闭连接。建议排查客户端是否有提前关闭连接的行为。

500(Internal Server Error)

后端服务器内部错误,无法执行请求。

后端状态码(upstream_status)的可能原因:后端服务器返回500,建议结合后端服务器上的错误日志等工具,排查报错的原因。

CLB状态码(status)的可能原因

  • 后端服务器直接返回500,CLB透传后端状态码给客户端。建议排查后端状态码返回500的原因。

  • 后端服务器在发送完响应之前异常关闭连接。建议在后端服务器抓包排查请求异常关闭的原因。

502(Bad Gateway)

HTTP或HTTPS监听接收到客户端连接请求后,CLB由于无法正常将请求转发至后端服务器或无法从后端服务器收到响应,则会向客户端发送HTTP 502 Bad Gateway状态码。

后端状态码(upstream_status)的可能原因

  • CLB与后端服务器之间TCP通信异常。建议排查后端服务器的状态是否正常、服务端口是否正常被监听,或抓包查看TCP握手报文是否正常。

  • 后端服务器负载过高,导致响应失败。如后端Backlog已满,导致报文丢弃。建议通过netstat查看后端服务器的网络统计结果是否有drop的计数,例如

  • 客户端发送的报文长度超过了后端服务器的最大传输单元(Maximum Transmission Unit,MTU),表现为健康检查或报文较短的包正常,但报文较长的包异常。建议在后端服务器抓包分析报文长度是否符合要求。

  • 后端服务器返回的报文格式异常或者有非法的HTTP标头。建议在后端服务器抓包确认HTTP格式是否正常。

  • CLB后端服务器没有及时完成请求处理。建议排查后端服务器的日志,并查看对应后端服务器的CPU、内存等的占用率。

CLB状态码(status)的可能原因

  • 后端服务器直接返回502,CLB透传后端状态码给客户端。建议排查后端状态码返回502的原因。

  • CLB后端服务器返回其他错误的状态码(例如504、444),但CLB统一返回502。建议排查访问日志的upstream_status和status字段或抓包排查后端服务器是否有异常。

  • 同一个服务器组的所有后端服务器健康检查都异常,与之关联的CLB实例无法转发请求,直接返回502。建议排查监听的健康检查是否正常。更多信息,请参见健康检查FAQ

503(Service Temporarily Unavailable)

暂时无法使用服务器,通常是由于流量超限或者后端服务器不可用。

后端状态码(upstream_status)的可能原因:后端服务器返回503,建议结合后端服务器上的日志等工具,排查报错的原因。

CLB状态码(status)的可能原因:

  • 后端服务器直接返回503状态码,CLB透传后端状态码给客户端。建议排查后端状态码返回503的原因。

  • 客户端请求的流量触发了CLB的限速。CLB实例规格的相关介绍,请参见CLB实例概述。建议您选择以下方式解决:

    您可以通过以下两种方式查看CLB实例的性能指标:

    • 通过在云监控查看实例每秒请求数指标 。更多信息,请参见查看CLB监控信息

    • 由于云监控的展示是分钟级的,可能无法展示秒级超限情况,您可以通过访问日志查看秒级的请求数。查看访问日志的upstream_status字段,内容为“-”时,表示请求未发送至后端服务器。

  • CLB监听没有配置后端服务器,或者配置的后端服务器的权重为0。

504(Gateway Time-out)

后端服务器响应超时。

后端状态码(upstream_status)的可能原因:后端服务器直接返回504状态码,建议排查是否由于后端服务器访问其他内部服务,造成响应超时。

CLB状态码(status)的可能原因

  • 后端服务器直接返回504状态码,CLB透传后端状态码给客户端。建议排查后端状态码返回504的原因。

  • CLB向后端服务器建立连接时,后端服务器建立连接超时,一般后端服务器响应超时时间默认设置为5秒,您可以查看访问日志中的upstream_connect_time字段是否为5秒或者大约为5秒。建议抓包排查后端服务器响应超时的原因。

  • 后端服务器负载增大,响应请求的时间大于所配置的请求超时时间。比如配置的请求超时时间是60秒,如果响应时间为60.001秒,CLB将返回504。您可以在云监控或者访问日志中查看问题时间段的延时情况,云监控查看upstream_rt, 访问日志中查看upstream_response_time。