交流一下,用 NGINX 反代后端运行于多个端口的 Python 程序时,大家的 max_fails 和 fail_timeout 都是怎么设的呢?
- 0次
- 2021-05-26 21:10:41
- idczone
抗投诉服务器
max_fails=0
fail_timeout和uWSGI里harakiri 设置时间一样。
如果是Ruby的unicorn,和 :timeout 设置一样。
所有upstream数量x每个upstream的worker数量的fail_timeout 加起来,应该不超过 proxy_read_timeout+proxy_connect_timeout 。默认是60秒。
也就是说,当upstream很忙的时候,nginx会挨个去尝试每个upstream,upstream会加入worker的处理队列,当这个所有处理能力都满了,nginx没有必要二次等待,直接返回504 gateway timeout算了。。。
final_timeout 理解的不对吧。 请查看 http://wiki.nginx.org/HttpUpstreamModule中的解释。
如果max_fails 为0,就不会去检查``fail_timeout``, 查看使用fail_timeout的源代码,就会异常清晰。
if (peer->max_fails
&& peer->fails >= peer->max_fails
&& now - peer->checked <= peer->fail_timeout)
你说的有道理,但是假如fail_timeout设置为60s,max_fails默认为1,那么1次失败之后,这个worker就会闲置60秒。