在本地开发计算机上,我有一个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将立即导致网关超时错误。

评论


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

–k0pernikus
16年8月11日在16:37

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

–k0pernikus
16-10-17在8:41



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

–kb。
16-10-17在10:21

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

–布兰登
17年8月30日在20:30



我添加了那个和proxy_connect_timeout 600;到nginx.conf文件,但超时仍为60秒。还有什么我应该尝试的?

– andreszs
17-10-27在0:32

#2 楼

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

评论


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

–doz87
18-10-2在5:04

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

–szeljic
18-10-2在8:28

这确实值得检查,尤其是在我的案例中,即在AWS下使用Magento进行工作。好点@szeljic

–vnpnlz
18-10-30在8:23



谢谢兄弟,这对我有用,因为我使用AWS负载均衡器来分发到我的EC2实例

–VũThànhTâm
18/12/5在7:47

@foo,位于AWS的LoadBalancer页面上。 “描述”标签和“属性”部分。空闲超时。

–szeljic
20年8月26日在13:23

#3 楼

可以增加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


评论


关于每个超时nginx.org/en/docs/http/…

– TRiNE
20年4月15日在7:02

无论如何,有没有将一个变量设置为1800,然后分配该变量,我尝试使用set,但是它没有用

–马克斯·卡罗尔
20年8月7日在20:12

@MaxCarroll,我认为配置文件通常不支持变量。 Set不起作用,因为它不是bash。

– Vasantha Ganesh
20年8月9日在10:58

#4 楼

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

对于gunicorn,它是:

gunicorn wsgi:application --timeout 300