Uvicorn, NGINX, Django

Использую для деплоя Django проекта nginx и gunicorn

Решил попробовать uvicorn

Запустить то получается, только вот связать uvicorn и nginx никак.

Конфиг nginx

...

http {
    ...

    upstream uvicorn {
        server unix:/home/dhvcc/PycharmProjects/dwapper/dwapper.sock;
    }
}

Конфиг проекта

server {
    listen 80;
    server_name 0.0.0.0;

    return 301 https://0.0.0.0:80$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    # SSL
    ssl_certificate /etc/nginx/ssl/dwapper.crt;
    ssl_certificate_key /etc/nginx/ssl/dwapper.key;
    # DJANGO
    location = /favicon.ico {
        access_log off; log_not_found off;
    }
    location /static/ {
        alias /home/dhvcc/PycharmProjects/dwapper/staticfiles/;
    }
    # UVICORN
    location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_redirect off;
        proxy_buffering off;
        proxy_pass http://uvicorn;
    }
}

При попытке зайти на сайт в лог получаю

*205 connect() to unix:/home/dhvcc/PycharmProjects/dwapper/dwapper.sock failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: , request: "GET / HTTP/2.0", upstream: "http://unix:/home/dhvcc/PycharmProjects/dwapper/dwapper.sock:/", host: "localhost"

Скорее всего, проблема в том, что uvicorn не запущен. Запускаю я так (--uds явно указывает на тот сокет)

/home/dhvcc/PycharmProjects/dwapper/venv/bin/uvicorn  --workers 3 --uds unix:/home/dhvcc/PycharmProjects/dwapper/dwapper.sock dwapper.asgi:application

Только запуск почему-то просиходит на http://127.0.0.1:8000.

dwapper.sock - файл, сгенерированный ещё во время работы с gunicorn

Вот старый конфиг сервиса, под которым работал gunicorn

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=dhvcc
Group=www-data
WorkingDirectory=/home/dhvcc/PycharmProjects/dwapper
ExecStart=/home/dhvcc/PycharmProjects/dwapper/venv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/dhvcc/PycharmProjects/dwapper.sock dwapper.wsgi:application -k uvicorn.workers.UvicornWorker

[Install]
WantedBy=multi-user.target

Ответы (1 шт):

Автор решения: Sergei Kirjanov

Предположительно uvicorn поднялся на http://127.0.0.1:8000.

Это можно проверить: curl -v http://127.0.0.1:8000. Даже если возвращается код 301, это уже значит, что сервер отвечает.

Тогда proxy_pass у nginx можно направить напрямую туда же.

unix-сокеты использоваться не будут, и заметной выгоды от них вероятно не было бы.

→ Ссылка