NGINX:从上游读取响应头时上游超时(110:连接超时)

NGINX:从上游读取响应头时上游超时(110:连接超时),nginx,timeout,puma,Nginx,Timeout,Puma,我有Puma作为上游应用服务器运行,Riak作为我的后台数据库集群。当我发送一个请求,要求map减少大约25K个用户的数据块,并将其从Riak返回到应用程序时,我在Nginx日志中得到一个错误: 读取时上游超时(110:连接超时) 来自上游的响应头 如果我在没有nginx代理的情况下直接查询上游,使用相同的请求,我将获得所需的数据 一旦代理被放入,Nginx超时就会发生 **nginx.conf** http { keepalive_timeout 10m; proxy_con

我有Puma作为上游应用服务器运行,Riak作为我的后台数据库集群。当我发送一个请求,要求map减少大约25K个用户的数据块,并将其从Riak返回到应用程序时,我在Nginx日志中得到一个错误:

读取时上游超时(110:连接超时) 来自上游的响应头

如果我在没有nginx代理的情况下直接查询上游,使用相同的请求,我将获得所需的数据

一旦代理被放入,Nginx超时就会发生

**nginx.conf**

http {
    keepalive_timeout 10m;
    proxy_connect_timeout  600s;
    proxy_send_timeout  600s;
    proxy_read_timeout  600s;
    fastcgi_send_timeout 600s;
    fastcgi_read_timeout 600s;
    include /etc/nginx/sites-enabled/*.conf;
}

**virtual host conf**

upstream ss_api {
  server 127.0.0.1:3000 max_fails=0  fail_timeout=600;
}

server {
  listen 81;
  server_name xxxxx.com; # change to match your URL

  location / {
    # match the name of upstream directive which is defined above
    proxy_pass http://ss_api; 
    proxy_set_header  Host $http_host;
    proxy_set_header  X-Real-IP  $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_cache cloud;
    proxy_cache_valid  200 302  60m;
    proxy_cache_valid  404      1m;
    proxy_cache_bypass $http_authorization;
    proxy_cache_bypass http://ss_api/account/;
    add_header X-Cache-Status $upstream_cache_status;
  }
}

Nginx有一系列超时指令。我不知道我是否错过了一些重要的事情。非常感谢您提供的任何帮助。…

我认为此错误可能是由于各种原因造成的,但它可能是特定于您使用的模块的。例如,我在使用uwsgi模块时看到了这一点,因此必须设置“uwsgi\u读取\u超时”。

在您的情况下,这有助于在代理中进行一些优化,或者您可以使用“超时设置”


从我们的角度来看,它使用了带有代理缓存的spdy。当缓存过期时,我们会收到此错误,直到缓存被更新。

您应该始终避免增加超时,我怀疑您的后端服务器响应时间在任何情况下都是问题所在

我通过清除connection keep alive标志并根据下面的答案指定http版本来解决这个问题:


不幸的是,我无法解释为什么这样做有效,也无法从链接答案中提到的文档中破译出来,因此,如果有人对此有解释,我会非常感兴趣。

我也遇到了同样的问题,导致rails控制器出现“每天”错误。我不知道为什么,但在生产过程中,puma一次又一次地运行错误,导致出现以下消息:

从上游读取响应头时,上游超时(110:连接超时)

可能是因为Nginx一次又一次地尝试从puma获取数据。有趣的是,即使我在控制器中调用不同的操作,错误也会导致超时消息,因此,一个输入错误就会阻止所有应用程序


检查日志/puma.stderr.log文件,查看是否存在这种情况

我建议查看
错误日志
,特别是上游部分,其中显示了正在超时的特定上游

然后在此基础上,您可以调整
proxy\u read\u timeout
fastcgi\u read\u timeout
uwsgi\u read\u timeout

还要确保您的配置已加载


此处有更多详细信息,这是因为上游响应请求的时间太长,NGINX认为上游处理请求已经失败,因此它会以错误响应。 只需在
位置
配置块中包括并增加代理读取超时。 同样的事情也发生在我身上,我在工作时对一个内部应用程序使用了1小时超时:

proxy_read_timeout 3600;

这样,NGINX将等待一个小时(3600秒),等待其上游返回某些内容。

首先通过查阅NGINX错误日志来确定哪个上游正在减速 归档并相应调整读取超时 就我而言,是fastCGI

2017/09/27 13:34:03 [error] 16559#16559: *14381 upstream timed out (110: Connection timed out) while reading response header from upstream, client:xxxxxxxxxxxxxxxxxxxxxxxxx", upstream: "fastcgi://unix:/var/run/php/php5.6-fpm.sock", host: "xxxxxxxxxxxxxxx", referrer: "xxxxxxxxxxxxxxxxxxxx"
因此,我必须在服务器配置中调整fastcgi\u读取\u超时

 location ~ \.php$ {
     fastcgi_read_timeout 240;
     ...
 }

请参阅:

希望它能帮助某人:
我遇到了这个错误,原因是phpfpm的日志文件夹权限错误,在更改它以便phpfpm可以写入它之后,一切都很好。

正如许多其他人在这里指出的那样,增加NGINX的超时设置可以解决您的问题

但是,增加超时设置可能不像这些答案所建议的那样简单。我自己也遇到了这个问题,并尝试更改/etc/nginx/nginx.conf文件中的超时设置,正如这些线程中几乎所有人所建议的那样。这对我一点帮助都没有;NGINX的超时设置没有明显变化。现在,几个小时后,我终于解决了这个问题

解决方案在于,它说的是,您应该将超时设置放在/etc/nginx/conf.d/timeout.conf(如果这个文件不存在,您应该创建它)。我使用了线程中建议的相同设置:

proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;

对于
proxy\u上游
timeout,我尝试了上面的设置,但这些设置不起作用

设置
resolver\u timeout
对我来说很有效,因为我知道生成上游超时消息需要30秒。例如,无法解析me.atwibble.com(110:操作超时)


新建将行配置添加到location或nginx.conf,例如:
代理读取超时900s

我认为uwsgi_读取_超时3600;代理发送超时3600;代理读取超时3600;对我来说很有用。请注意,在http部分使用
proxy\u read\u timeout
可能没有帮助。我在location部分中有
proxy\u pass
指令,只有
proxy\u read\u timeout
设置起了作用。(nginx1.16.0)对我来说似乎在http/server/location中工作……也许事情已经改变了:)对我来说,在location部分使用这些设置确实会有所不同。将它们放在http部分没有帮助(因为我在location部分也有
proxy\u pass
。你到底在用这些声明优化什么?一个花时间加载的页面没有超时。正在传递可能正在使用的标题,并且正在将缓冲区设置为限制。很高兴在一个地方看到所有超时设置的列表。对我来说,我需要知道要缩短哪一个以使我的错误响应迅速删除行为不正常的上游。如果您知道代理(即使是特定URL),为什么不调整
代理\u read\u timeout
需要更多的处理时间?嗨!我已经记不清确切的问题了,但我认为这与url的实际时间无关,而是因为如果没有这些,超时无法正确处理
 location ~ \.php$ {
     fastcgi_read_timeout 240;
     ...
 }
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;