在nginx中 499状态码的定义是 client has closed connection,也就是客户端断开了连接。
所以显然,客户端端主动关闭请求或者客户端网络断掉时,于是nginx就记录了499状态,并且断开了和后面服务端的连接(这样可能导致服务端返回数据时,因为连接断开而报错)
解决499问题:
1、查看服务端为什么响应这么慢,是否需要优化,或者调大客户端方的连接超时时间,不那么快断开
2、proxy_ignore_client_abort参数设置为on,默认是off的
location =/api { proxy_ignore_client_abort on; proxy_pass http://service_backends; }
这个参数的意思是:在客户端主动关闭连接后, nginx 与分发服务器的连接是否保持连接。
如果参数设置了on,则客户端如果断开连接,nginx也不会断开与后端服务端的连接,nginx会等待后端处理完(或者超时),然后记录「后端的返回信息」到日志。所以,如果后端返回 200,就记录 200 ;如果后端放回 5XX ,那么就记录 5XX 。
如果超时(默认60s,可以用 proxy_read_timeout 设置),Nginx 会主动断开连接,记录 504。
这个方案只是解决了两个问题:(1)nginx上499的错误(2)服务端因为连接断开报Broken pipe的错误
所以最好的方法还是优化服务端