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

upstream读取时超时(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有一堆超时指令。我不知道我是不是错过了什么重要的东西。任何帮助将高度赞赏....


当前回答

如果你在windows 10上使用wsl2,通过下面的命令检查你的版本:

wsl -l -v

您应该在版本下面看到2。 如果没有,则需要安装wsl_update_x64。

其他回答

首先,通过查看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_read_timeout在我的服务器配置

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

参见:原文

正如很多人在这里指出的,增加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;

我建议查看error_logs,特别是上游部分,其中显示了超时的特定上游。

然后在此基础上,您可以调整proxy_read_timeout, fastcgi_read_timeout或uwsgi_read_timeout。

还要确保您的配置已加载。

更多细节在这里Nginx上游超时(为什么和如何修复)

这是因为你的上游花了太长时间来响应请求,NGINX认为上游已经在处理请求时失败了,所以它响应一个错误。 只需在位置配置块中包含并增加proxy_read_timeout。 同样的事情也发生在我身上,我在工作中使用了1小时的内部应用程序超时:

proxy_read_timeout 3600;

这样,NGINX就会等待一个小时(3600秒)等待上游返回一些东西。

我们在保存内容(自定义内容类型)时遇到了超时错误。通过添加以上所有超时,http客户端配置到600s,并增加php进程的内存到3gb来修复这个问题。