Nginx Gunicorn Django - преждевременно закрытое соединение вверх по течению Ошибка - PullRequest
0 голосов
/ 14 декабря 2018

Я новичок в настройках 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 голосов
/ 14 декабря 2018

Пожалуйста, проверьте следующие шаги:

  • Прежде всего убедитесь, что 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/;
    
    }
    
...