如何禁用Nginx超时?


47

在本地开发计算机上,我有一个像这样的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
考虑开始执行后台作业,然后让用户检查其状态。
迈克尔·汉普顿

Answers:


61

可能根本无法禁用它,但是可行的解决方法是增加执行时间。在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会立即导致网关超时错误。


3
亲爱的随机投票者,对这种做法的不好之处发表评论会很好。
k0pernikus

7
@kb。有趣的是,我是OP,只是在等待真正的解决方案时发布了最可行的解决方法作为答案^^
k0pernikus 16-10-17

2
哈哈,我完全想念你是OP。但是您的答案是正确的,您可以使(对于像我这样的未来Google员工)更加清楚地知道,没有办法禁用它。=)
kb。

5
感谢您提供有关0无法正常工作的信息!请注意,您可以使用可读的后缀指定时间单位,因此可以使用1d
实名修订

3
我已将其添加proxy_connect_timeout 600;到nginx.conf文件中,但超时仍为60秒。还有什么我应该尝试的?
andreszs 17-10-27

9

如果您使用的是AWS和Load Balancer,则应编辑空闲超时。我认为默认值为60秒


我理解为什么这被否决了,但也许如果答案得到更新以解释其用例,它将更有用。尽管这不能解决OP问题,但是考虑使用ELB还是很有用的,因为它们还会保持打开连接的时间有限制。
doz87 '18 -10-2

@ doz87是的,这只是考虑因素
szeljic

尤其值得一提的是,对于我在AWS下使用Magento的案例,这确实值得检查。好点@szeljic
vnpnlz

谢谢兄弟,这对我的作品,因为我使用AWS负载均衡分发到我的EC2实例
VU THANH TAM

这值得所有支持-任何AWS用户都将被限制为60秒,无论他们的NGINX设置如何,如果没有此设置
Aphire

4

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

对于Gunicorn,它是:

gunicorn wsgi:application --timeout 300
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.