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

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

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

如果我直接查询我的上游没有nginx代理,与相同的请求,我得到所需的数据。

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

**nginx.conf** user www-data; worker_processes 2; pid /var/run/nginx.pid; events { worker_connections 4000; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 10m; proxy_connect_timeout 600s; proxy_send_timeout 600s; proxy_read_timeout 600s; fastcgi_send_timeout 600s; fastcgi_read_timeout 600s; types_hash_max_size 2048; proxy_cache_path /opt/cloud/cache levels=1 keys_zone=cloud:10m; include /etc/nginx/mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; gzip on; gzip_disable "msie6"; 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 if ($http_x_forwarded_proto != 'https') { return 301 https://$server_name$request_uri; } location / { proxy_pass http://ss_api; # match the name of upstream directive which is defined above 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; } location ~ /\. { deny all; } 

}

Nginx有一堆超时指令。 我不知道我是否错过了一些重要的东西。 任何帮助将不胜感激….

你应该永远不要增加超时,我怀疑你的后端服务器的响应时间在这里无论如何是问题。

我通过清除连接保持活动标志并指定http版本来解决此问题: https : //stackoverflow.com/a/36589120/479632

 server { location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; # these two lines here proxy_http_version 1.1; proxy_set_header Connection ""; proxy_pass http://localhost:5000; } } 

不幸的是,我不能解释为什么这个工作,并没有设法破译从答案中提到的文档,所以如果任何人有一个解释,我会很感兴趣,听到它。

在你的情况下,它有助于代理中的一个小优化,或者你可以使用“#超时设置”

 location / { # time out settings proxy_connect_timeout 159s; proxy_send_timeout 600; proxy_read_timeout 600; proxy_buffer_size 64k; proxy_buffers 16 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; proxy_pass_header Set-Cookie; proxy_redirect off; proxy_hide_header Vary; proxy_set_header Accept-Encoding ''; proxy_ignore_headers Cache-Control Expires; proxy_set_header Referer $http_referer; proxy_set_header Host $host; proxy_set_header Cookie $http_cookie; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } 

我认为这个错误可能会因为各种原因而发生,但是它可能是你正在使用的模块所特有的。 例如我看到这个使用uwsgi模块,所以不得不设置“uwsgi_read_timeout”。

我会build议看看error_logs,特别是在上游部分,它显示特定的上游,超时。

然后基于此,您可以调整proxy_read_timeout fastcgi_read_timeout或uwsgi_read_timeout。

还要确保你的configuration已经加载。

更多细节Nginx上游超时(为什么以及如何解决)

首先通过查询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" 

所以我必须在我的服务器configuration中调整fastcgi_read_timeout

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

请参阅: 原始post

可能是值得的http://howtounix.info/howto/110-connection-timed-out-error-in-nginx (他把proxy_read_timeoutlocation

从我们这边来看,它使用spdy和代理caching。 当caching过期时,我们得到这个错误,直到caching被更新。

我有同样的问题,导致这是轨道控制器中的“每一天”的错误。 我不知道为什么,但在生产上,美洲狮运行一次又一次的错误导致的消息:

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

可能是因为Nginx试图一次又一次地从美洲狮获得数据。有趣的是,即使我在控制器中调用不同的动作,错误也会导致超时消息,所以,一个错字会阻止所有的应用程序。

检查您的日志/ puma.stderr.log文件,看看是否是这种情况。

发生这种情况是因为上游需要太多的回应请求,而NGINX认为上游在处理请求时已经失败,所以它会响应一个错误。 只需在位置包含并增加proxy_read_timeout即可。 同样的事情发生在我身上,我在工作中使用了一个小时超时的内部应用程序:

 proxy_read_timeout 3600; 

有了这个,NGINX将等待一个小时的上游返回的东西。

Interesting Posts