nginx 499 状态码优化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx 499 状态码优化相关的知识,希望对你有一定的参考价值。

在grafana界面中发现不少499的状态码,在网上了解到出现499的原因大体都是说服务端处理时间过长,客户端主动关闭了连接。

   

既然原因可能是服务端处理时间太长了,看一下upstream_response_time时间可以了解到后端程序处理了多久。

先了解一下什么是upstream_response_time和request_time分别是什么:

  • request_time:服务端从接受客户端请求的第一个字节到服务端应用程序处理完发送完响应数据的时间,包括请求数据时间、程序响应时间、输出响应时间
  • upstream_response_time:指nginx向后端如php,tomcat等建立连接开始到到处理完数据关闭连接为止的时间

上面说过,原因可能是服务端处理时间太长了, 那么应该upstream_resopnse_time和request_time时间很长才对。。看下图,打脸了,upstream_response_time没有记录,request_time也非常短,也就是说nginx根本没有将请求转发到php处理,而是直接返回了499状态码,所以没有upstream_response_time,并且request_time时间很短,甚至为零。

这么说我这里出现499不是服务端处理时间太长了,而是另有他因。

看来百度是不行的,google查找,原因可能是以下:

  1. 客户端请求速度过快,触发了nginx保护机制,直接返回499状态码
  2. 第二种情况就是客户端主动关闭了连接
  3. 证书错误

优化方法:

    #size limits for 502 499
    client_max_body_size             50m;
    client_body_buffer_size        256k;
    client_header_timeout     3m;
    client_body_timeout 3m;
    client_body_temp_path /dev/shm/client_body_temp;
    send_timeout             3m;

    proxy_ignore_client_abort on;    # 告诉nginx不要主动关闭连接
    proxy_connect_timeout 600;
    proxy_read_timeout 600;
    proxy_send_timeout 600;
    proxy_buffer_size 32k;
    proxy_buffers 4 64k;
    proxy_busy_buffers_size 128k;
    proxy_temp_file_write_size 512k;

 

以上是关于nginx 499 状态码优化的主要内容,如果未能解决你的问题,请参考以下文章

Nginx 搞清楚 499 状态码

HTTP 499状态码 nginx下499错误及其解决方法

HTTP 499 状态码 nginx下 499错误

nginx-499状态码

HTTP 499 状态码 nginx下 499错误

Nginx状态码499