聊聊nginx与tomcat的5xx

本文主要讲述一下nginx与tomcat的502、504、503错误及其常见的产生原因。

502

定义

502 Bad Gateway : 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。

常见原因

后端服务挂了的情况,直接502

后端服务在重启

实例

将后端服务关掉,然后向nginx发送请求后端接口,日志如下:

504

定义

504:gateway timeout.作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应。注意:某些代理服务器在DNS查询超时时会返回400或者500错误

常见原因

该接口太耗时,后端服务接收到请求,开始执行,未能在设定时间返回数据给nginx

后端服务器整体负载太高,接受到请求之后,由于线程繁忙,未能安排给请求的接口,导致未能在设定时间返回数据给nginx

实例

503()

定义

503表示service unavailable,表示服务器当前处于暂时不可用状态,无论是有意还是无意,当服务器端处于无法应答的状态时,就会返回该状态码。其中,服务端因维护需要而停止服务属于有意的情况。而当服务器自身负载过高,处于无法响应的状态时,则属于无意的情况。另外,负载均衡器或者web服务器的前置机等这些地方的服务器也有可能返回503.

常见原因

nginx进行限流,超过限速则返回503

后端服务进行常规维护,比如pause tomcat

nginx限流返回503实例tomcat返回503实例

Http11Processor

tomcat-embed-core-8.5.23-sources.jar!/org/apache/coyote/http11/Http11Processor.java

只要endpoint的状态是paused,则返回503

AbstractEndpoint

tomcat-embed-core-8.5.23-sources.jar!/org/apache/tomcat/util/net/AbstractEndpoint.java

这里是endpoint的pause以及resume方法

请求

当请求进入Http11Processor的service方法到执行endpoint.isPaused()方法期间,tomcat被pause了,这个时候,就会返回503,如下:

小结

502

通常是后端服务挂了或在重启

504

通常是请求的接口执行耗时,亦或是后端服务负载高,执行耗时

503

通常是nginx限流或后端服务pause进行维护

doc

Nginx状态码总结

nginx错误502,503,504分析

Nginx 502 503 错误触发条件与解决办法汇总

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171226G0WWZH00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券