499状态码定义
维基百科的定义
499 Client Closed Request (Nginx) Used in Nginx logs to indicate when the connection has been closed by client while the server is still processing itsrequest, making server unable to send a status code back
499状态码是nginx自定义的状态码,不是标准的状态码,在官网的定义是Client Closed Request
,也即客户端关闭了请求连接,原因大部分是因为接口响应太久了,客户端设置了超时时间,直接关闭了请求连接。原因可能是网络网速问题,也有可能是后端接口响应太慢了
处理方法
- 可能是客户端设置的超时时间太短了,这种情况可以检查客户端设置的超时时间,改长一点即可
- 优化后端接口代码,提高接口能支持的并发数和响应速度
- 如果是频繁的post请求,nginx会认为不安全,这种情况会直接返回499状态码,保护系统安全
如果系统需要记录后端响应日志,可以设置proxy_ignore_client_abort
参数设置为on
,开启后,后端接口超过了客户端的响应时间,后端接口会继续执行,日志也会记录到nginx里,不过这种做法会在一定程度上造成nginx的资源使用,需要根据实践情况使用,如果为了系统安全,建议还是不开启
location =/api {
proxy_ignore_client_abort on;
proxy_pass http://web.server.com;
}
proxy_ignore_client_abort参数设置为on后,如果客户端断开连接,nginx也不会断开与后端服务端的连接,会等待后端服务器接口的返回,然后记录到日志,如果是返回5xx,就记录5xx状态码日志,返回200成功,就记录200状态码的日志,如果超过了响应时间,默认60s,可以用 proxy_read_timeout 设置,就记录504状态码的日志