上游超时(uWSGI + NGINX + Flask)

Posted

技术标签:

【中文标题】上游超时(uWSGI + NGINX + Flask)【英文标题】:Upstream timed out (uWSGI + NGINX + Flask) 【发布时间】:2018-08-17 21:24:59 【问题描述】:

我的应用程序有以下堆栈:

    nginx (1.4.6) uWSGI (1.9.17.1-debian (64bit)) 烧瓶 Python 3.4

问题 NGINX 重新启动后,一段时间(几分钟)一切正常。在那段时间之后,我收到“504 网关超时”错误。

NGINX 日志:

*13 上游超时(110:连接超时)同时从上游读取响应头,客户端:86.123.39.44,服务器: app.fc.com,请求:“GET /dashboard/overview HTTP/1.1”,上游: “uwsgi://127.0.0.1:8001”,主机:“app.fc.com”,推荐人: "http://app.fc.com/dashboard/overview"

uWSGI 日志:

app.fc.com [pid: 100017|app: 0|req: 103/219] 86.123.39.44 () 44 vars in 859 bytes [Fri Mar 9 06:24:22 2018] GET /login => 生成 245 1 毫秒内的字节数 (HTTP/1.1 302) 131 字节内的 3 个标头(1 个打开 核心1)

我的 NGINX 配置是:

server 
        listen 80;
        listen [::]:80;

        root /var/www/fc/website;
        index index.html index.htm index.php;

        # Make site accessible from http://localhost/
        server_name app.fc.com;

        location / 
                sendfile        on;
                client_max_body_size 20M;
                keepalive_timeout  0;

                proxy_connect_timeout   10;
                proxy_send_timeout      15;
                proxy_read_timeout      20;

                include uwsgi_params;
                uwsgi_pass 127.0.0.1:8001;
                #uwsgi_read_timeout 30;
                #uwsgi_send_timeout 30;
                uwsgi_connect_timeout 60;
                uwsgi_ignore_client_abort on;
        

我的 uWSGI 配置是:

[uwsgi]
vhost = true
socket = :8001
#wsgi-file = /var/www/app.fc.com/reviewApp/wsgi.py
wsgi-file = /var/www/fc/app/wsgi.py
callable = app
processes = 2
threads = 4
chdir = /var/www/fc/app/

pythonpath = /var/www/fc/app/
pythonpath = /var/www/py3/lib/python3.4
virtualenv = /var/www/py3
plugins = python3

通常,对我的请求的响应持续不到 5 秒

【问题讨论】:

你检查了uwsgi 日志吗? @heemayl 我已经添加了来自 uWSGI 的日志 如果您从设置中删除 uWSGI 并直接使用 NGINX 为 Flask 应用程序提供服务怎么办?只是为了帮助找到罪魁祸首。 【参考方案1】:

解决方案

我在调用 Redis 的页面上发现了这种行为。我通过在 Redis 为每个请求添加一个新的连接并在 Redis 配置中设置连接空闲超时来解决(短时间解决方案)。

其他发现

当连接在许多 uWSGI 线程之间共享时,Redis 似乎在 300 秒不活动(这是出现此问题后的间隔)后挂起大约 931 秒。

【讨论】:

以上是关于上游超时(uWSGI + NGINX + Flask)的主要内容,如果未能解决你的问题,请参考以下文章

错误:从上游 [uWSGI/Django/NGINX] 读取响应标头时,上游过早关闭连接

uwsgi + nginx + flask:上游过早关闭

nginx,uwsgi,DJango,502 当 DEBUG=False,“上游过早关闭连接”

nginx uwsgi websockets 502 Bad Gateway上游过早关闭连接,同时从上游读取响应标头

从上游读取响应头时,Nginx uwsgi(104:由对等方重置连接)

NGINX *7060 上游超时(110:连接超时)