nginx httpcode status 499 的原因及解决方法 timeout 超时设置建议
499 的解释
499 状态码不是 HTTP 的标准状态码
499 状态码是 Nginx 自己定义,用来 记录(你没看错,就是记录一下) 服务端向客户端发送 HTTP 请求头之前,客户端已经关闭连接的一种情况
最常见的场景就是 timeout 设置不合理
Nginx 把请求转发给后端服务器
后端服务器慢吞吞的处理
客户端等不及了主动断开链接
Nginx 就负责记录了 499
正确设置 timeout 的方法建议
例如:
User → CDN → Nginx Load Balancer → Nginx application → Php_fpm
n seconds to Php_fpm timeout.
设置 php.ini max_execution_time and the request_terminate_timeout in your php_fpm config file.
n+1 seconds to Nginx application timeout.
Set the fastcgi_read_timeout in your nginx config.
n+2 seconds to timeout to Nginx Load Balancer
In your location doing the proxy_pass set the timeouts of:
proxy_connect_timeout
proxy_send_timeout
proxy_read_timeout
n+3 seconds of timeout for your CDN.
它提供了一个正确的超时链:设置一个递增的超时链可以让你找到谁达到了超时。
解决 499 问题
client 多等一会
后端处理快一点
proxy_ignore_client_abort
默认是 off; 我们可以打开 on
它的作用是:在客户端主动关闭连接后, nginx 与 后端服务器的连接是否保持连接。
location =/api { proxy_ignore_client_abort on; proxy_pass http://service_backends; }
on: 则客户端断开连接,nginx 也不会断开与后端服务端的连接,nginx会等待后端处理完(或者超时),然后记录「后端的返回信息」到日志。所以,如果后端返回 200,就记录 200 ;如果后端放回 5XX ,那么就记录 5XX 。
如果超时(默认60s,可以用 proxy_read_timeout 设置),Nginx 会主动断开连接,记录 504。
共 0 条评论