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