• Ukieweb

    佳的博客

    曾梦想仗剑天涯,后来工作忙没去。

nginx httpcode status 499 的原因及解决方法 timeout 超时设置建议

image.png

499 的解释

  • 499 状态码不是 HTTP 的标准状态码

  • 499 状态码是 Nginx 自己定义,用来 记录(你没看错,就是记录一下) 服务端向客户端发送 HTTP 请求头之前,客户端已经关闭连接的一种情况

最常见的场景就是 timeout 设置不合理

  1. Nginx 把请求转发给后端服务器

  2. 后端服务器慢吞吞的处理

  3. 客户端等不及了主动断开链接

  4. 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 问题

  1. client 多等一会

  2. 后端处理快一点


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
0
下一篇:windows 容器 限制 docker desktop 使用 wsl2 时 的内存 cpu 等资源

0 条评论

老佳啊

85后,大专学历,中原人士,家里没矿。

由于年轻时长的比较帅气,导致在别人眼里,我一直不谈恋爱的原因是清高,实则是自己的小自卑。最大的人生目标就是找一个相知相爱相容的人,共度余生。

和人相处时如果能感受到真诚,会非常注重彼此的关系,对别人没有什么心机,即使有利益冲突,一般也会以和为贵,因为在这个世界上,物质的东西,从来不会吸引到我。

特别迷恋那些大山大水,如果现在还能隐居,可能早就去了。对那些宏伟的有底蕴的人文景观比较不感冒。

从事于IT行业,却一直对厨房念念不忘,由于身材魁梧,总觉得自己上辈子是个将军,可惜这辈子没当兵,也不会打架。