上游超时(uWSGI + NGINX + Flask)

时间:2018-03-09 10:19:58

标签: python nginx flask redis uwsgi

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

  1. NGINX(1.4.6)
  2. uWSGI(1.9.17.1-debian(64bit))
  3. Flask
  4. Python 3.4
  5. 问题 NGINX重新启动后,一段时间(几分钟)运行良好。在那段时间之后,我收到了#34; 504 Gateway Time-out"错误。

    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   在859字节} [Fri Mar 9 06:24:22 2018] GET / login =>生成245   1 msecs(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秒

1 个答案:

答案 0 :(得分:0)

解决方案

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

其他发现

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