nginx 499的一些收获

最近,发现项目组各个系统,很多接口都出现了499的状态码。但是所占的比例不大。大概2%左右的

好奇499代表的是什么,通过查询,发现是** client has closed connection**

499并不是标准http_code,而是nginx自定义的一种code. 通过查询nginx源码,该code定义在ngx_http_request.h这个文件中

image

为什么会反馈这个code?

原因客户端主动断开,导致Nginx转发后端返回的数据,发现客户端已经断开。具体的判断逻辑,欢迎

查看Nginx源码。

测试方法:请求命令如下

curl --connect-timeout 0 -m 0.5 "你的接口地址";

image

ngxin 返回的结果:

image

产生的原因:

1.客户端的主动断开连接:

移动端ios 和 安卓主动断开,超过了其设置的超时时间。

2.浏览器自带的超时。

chrome的超时时间是5s 源码如下
image

测试验证:

当请求时间为6s+的时候,的确返回了499.
这里qq浏览器是最变态的0.9s以上都会抛499

firfox的超时时间也是超过4s以上

image

解决方案:

  1\. 建议检查接口是否有慢查询。处理接口慢查询

  2\. 提高接口的响应速率,减少包体不必要的传输内容。
  3\. web资源静态化,尽量减少接口的响应时间

  4\. nginx 代理设置
       设置 proxy_ignore_client_abort on; 表示代理服务端不要主要主动关闭客户端连接。
       但是该方案会存在安全问题。

以上是本人针对499的一些浅析。如有错误欢迎指正,拍砖。

感谢~

你可能感兴趣的:(nginx 499的一些收获)