如何禁用 nginx 的超时?

如何禁用 nginx 的超时?

在本地开发机器上,我有一个 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;
}

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

504 Gateway Time-out

作为回应。

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

答案1

可能根本无法禁用它,但一个可行的解决方法是增加执行时间。nginx 教程网站,其中写道:

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

vim /etc/nginx/nginx.conf

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

http {
     fastcgi_read_timeout 300;
     proxy_read_timeout 300;
}

并重新加载 nginx 的配置:

sudo service nginx reload

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

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

答案2

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

        location /xyz {
         proxy_read_timeout 1800;
         proxy_connect_timeout 1800;
         proxy_send_timeout 1800;
         send_timeout 1800;
        }

这里的 1800 是秒。

更改配置后,使用以下命令验证语法:

nginx -t -c /some/path/nginx.conf

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

nginx -s reload

答案3

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

答案4

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

对于 gunicorn 来说它是:

gunicorn wsgi:application --timeout 300

相关内容