今天在下面的这个 NGINX 例子配置文件里里看到一个有意思的观点,就是如果后端是一个动态程序,那么 upstream 的 fail_timeout
应该设置为 0 :
https://bogomips.org/unicorn/examples/nginx.conf
upstream app_server {
...
server 192.168.0.7:8080 fail_timeout=0;
...
}
fail_timeout
的默认值是 10 秒,配合默认值为 1 的 max_fails
参数,意思是如果在 fail_timeout
期间后端失败了 max_fails
次,那么就将这个后端标识为不可用,在接下来的 fail_timeout
期间, NGINX 不会再将请求分配到这个后端。
如果将 fail_timeout
设置为 0 ,那么无论后端失败了多少次, NGINX 会继续把请求分发到这个后端服务器地址。
如果后端是一个动态程序,比如 Python 或者 Node.js ,那么就应该将 fail_timeout
设置为 0 ,这样即使后端偶尔抛出一个 500 错误,那么也不应该暂停服务。在动态应用中,出现偶尔的 500 错误是很正常而且几乎无法避免的。如果后端因为某些更严重的原因一直出现 500 错误,那么这种问题其实也是任何 NGINX 配置都解救不了的。
fail_timeout
设置为 10 秒或者更长时间,可能对于静态的后端会更有意义。因为静态的后端通常很难出现 500 错误。如果出错了,一般也都是因为一些更麻烦的问题,比如硬盘坏了,或者内存满了之类,这种时候通过 fail_timeout
的值来暂时避免将请求发送到有问题的静态后端,是有意义的。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.