什么是 nginx 的 499
nginx源碼中的定義
/*
* HTTP does not define the code for the case when a client closed
* the connection while we are processing its request so we introduce
* own code to log such situation when a client has closed the connection
* before we even try to send the HTTP header to it
*/
#define NGX_HTTP_CLIENT_CLOSED_REQUEST 499
499
是nginx定义的一个状态码,用于表示: 服务器返回http头之前,客户端主动断开连接
產生原因
服务器upstream处理过慢,导致用户提前关闭连接
-
1 server处理请求未结束,而client提前关闭了连接
-
2 在一个upstream出错,执行next_upstream时也会判断连接是否可用,不可用则返回499
可能的原因:
后台程序处理请求时间过长
mysql慢查询
解決方法
(1)增加响应时间
在 nginx.conf
的 http 块
中添加 proxy_ignore_client_abort on
;
默认的情况下该参数是关闭的
Determines whether the connection with a proxied server should be closed when a client closes the connection without waiting for a response.
在客户端主动关闭连接后, nginx 与分发服务器的连接是否保持连接
如果使用了 proxy_ignore_client_abort on
Nginx 会等待后端处理完(或者超时),然后记录「后端的返回信息」到日志。所以,如果后端返回 200
,就记录 200
;如果后端放回 5XX
,那么就记录 5XX
。
如果超时(默认60s,可以用 proxy_read_timeout
设置),Nginx 会主动断开连接,记录 504
。
(2) 从本质上解决客户端没能拿到请求响应的问题