Nginx Gunicorn Django-上游过早关闭连接错误

时间:2018-12-14 06:58:28

标签: django asynchronous nginx gunicorn supervisord

我对NGINX,GUNICORN和DJANGO设置很陌生。我在nginx和gunicorn之间使用主管。如果没有NGINX,则安装程序可与主管和Gunicorn完美配合,并且可以通过服务器IP看到结果。但是,当我使用nginx服务请求时,会出现错误“上游从上游读取响应标头时过早关闭连接”。请有人帮我吗?

Supervisor command I am using:
sudo /path/to/gunicorn/gunicorn -k gevent --workers 4  --bind unix:/tmp/gunicorn.sock --chdir /path/to/application wsgi:application --timeout 120

下面是我当前正在使用的nginx.conf,它正在按预期方式工作。但我不确定是否符合要求。请调查一下。谢谢。

==============更新=============

upstream xxxx {
    server unix:/tmp/gunicorn.sock;
}

server{

    listen 80;
    listen [::]:80;
    server_name xxx.in www.xxx.in;
    return 301 https://$host$request_uri;
}

    server{
         listen 443 ssl;
         ssl_certificate /etc/letsencrypt/live/xxx.in/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/xxx.in/privkey.pem;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
        location = /favicon.ico { access_log off; log_not_found off; }
            location /static/ {
                root path/to/project;
        }

        location / {
            include         uwsgi_params;
            proxy_pass      http://unix:/tmp/gunicorn.sock;
        } 

    }

1 个答案:

答案 0 :(得分:0)

请检查以下步骤:

  • 首先,请确保gunicorn正在创建与主管一起运行的.sock文件。您可以使用

    来确保
    $sudo supervisorctl status <name-of-supervisor-task-for-it>
    (check if service is RUNNING)
    
    $ls /tmp    
    (There should be a gunicorn.sock file existing there)
    
  • 还请注意您要分配给超级用户配置的用户。在这种情况下,您无需在命令前设置root用户,只需将root用户的特权授予配置文件即可。像这样:

    [program:myprogram]
    command=/path/to/gunicorn/gunicorn -k gevent --workers 4 --bind unix:/tmp/gunicorn.sock --chdir /path/to/application wsgi:application --timeout 120
    <other commands>
    user=root
    
  • 而您的nginx配置应该看起来像这样:

    upstream django {
    server unix://tmp/gunicorn.sock;
    }
    
    
    server {
    listen 80;
    server_name <your_app_domain_here>;
    location / {
    include uwsgi_params;
    proxy_pass http://django/;
    
    }