如何禁用nginx的超时?

k0p*_*kus 91 configuration nginx timeout

在本地开发机器上,我有一个 nginx 反向代理,如下所示:

server {
  listen 80;
  server_name myvirtualhost1.local;
  location / {
    proxy_pass http://127.0.0.1:8080;
}

server {
  listen 80;
  server_name myvirtualhost2.local;
  location / {
    proxy_pass http://127.0.0.1:9090;
}
Run Code Online (Sandbox Code Playgroud)

然而,如果我调试我的应用程序,响应可能会延迟无限长的时间,但在 30 秒后我得到:

504 Gateway Time-out

作为回应。

如何禁用超时并使我的反向代理永远等待响应?而且我喜欢全局设置,这样我就不必为每个代理设置它。

k0p*_*kus 107

可能根本无法禁用它,但可行的解决方法是增加执行时间。在nginx 教程站点上,它是这样写的:

如果要增加服务器上所有站点的时间限制,可以编辑主nginx.conf文件:

vim /etc/nginx/nginx.conf
Run Code Online (Sandbox Code Playgroud)

在 http{..} 部分添加以下内容

http {
     fastcgi_read_timeout 300;
     proxy_read_timeout 300;
}
Run Code Online (Sandbox Code Playgroud)

并重新加载 nginx 的配置:

sudo service nginx reload
Run Code Online (Sandbox Code Playgroud)

我使用了一个不太可能发生的相当大的值,即999999或使用时间单位,到一天通过1d.

请注意,将值设置为0将立即导致网关超时错误。

  • 亲爱的随机downvoter,评论这种做法的坏处会很好。 (10认同)
  • @kb。有趣的是,我是 OP,只是发布了最可行的解决方法作为答案,同时等待真正的解决方案 ^^ (9认同)
  • 感谢有关“0”不起作用的信息!请注意,[您可以使用可读后缀指定时间单位](https://nginx.org/en/docs/syntax.html),因此您可以使用像“1d”这样的值。 (6认同)
  • 我已经将它和 `proxy_connect_timeout 600;` 添加到 nginx.conf 文件中,但超时仍然是 60 秒。还有什么我应该尝试的吗? (3认同)
  • 哈哈,我完全怀念你是OP。但是您的答案是正确的,您可以更清楚地说明(对于像我这样的未来谷歌员工),没有办法禁用它。=) (2认同)
  • 我猜你被否决了,因为你永远不应该碰“/etc/nginx/nginx.conf”。如果进行更新,该文件可能会被删除,无论如何这是一个不好的做法。仔细阅读该文件,您将在“http”部分看到,它包含“include /etc/nginx/conf.d/*.conf;”。因此,您应该在此处放置自己的“自定义”配置:创建一个文件,例如“/etc/nginx/conf.d/global_custom.conf”(或您想要的任何名称),然后将指令放在那里。您可以在网络上找到很多误导性信息... (2认同)

小智 24

如果您使用 AWS 和负载均衡器,您应该编辑空闲超时。我认为默认是 60 秒


小智 23

可以增加 nginx 的超时时间,添加到@k0pernikus 的答案中,可以将以下内容添加到您的位置块中:

        location /xyz {
         proxy_read_timeout 1800;
         proxy_connect_timeout 1800;
         proxy_send_timeout 1800;
         send_timeout 1800;
        }
Run Code Online (Sandbox Code Playgroud)

这里 1800 是以秒为单位的。

更改配置后,验证语法:

nginx -t -c /some/path/nginx.conf
Run Code Online (Sandbox Code Playgroud)

然后使用以下命令重新加载 nginx:

nginx -s reload
Run Code Online (Sandbox Code Playgroud)

  • 关于每个超时 http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_read_timeout (2认同)

小智 10

我一直在与 nginx 502 超时错误作斗争,但无法解决问题。但是,恰好是gunicorn导致超时错误。因此,您可能还需要检查您的 fastcgi 设置。

对于 gunicorn,它是:

gunicorn wsgi:application --timeout 300
Run Code Online (Sandbox Code Playgroud)