在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查找,原因可能是以下:
客户端请求速度过快,触发了nginx保护机制,直接返回499状态码
第二种情况就是客户端主动关闭了连接
证书错误
优化方法:
#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;
CentOS 7.2下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1
搭建基于Linux6.3+Nginx1.2+PHP5+MySQL5.5的Web服务器全过程
CentOS 6.3下配置Nginx加载ngx_pagespeed模块
CentOS 6.4安装配置Nginx+Pcre+php-fpm