Nginx не может прокси приложения django через gunicorn - PullRequest
0 голосов
/ 02 июня 2019

Я пытаюсь развернуть приложение Django на сервере Ubuntu 18.04, используя Nginx и Gunicorn.Кажется, что каждый инструмент работает должным образом, по крайней мере, с точки зрения журналов и состояния.

Дело в том, что если я войду на свой сервер с использованием SSH и попытаюсь использовать curl, gunicorn сможет увидеть запрос исправиться.Однако, если я пишу напрямую свой IP, я получаю просто типичную Добро пожаловать на домашнюю страницу nginx , и запрос полностью невидим для gunicorn, поэтому кажется, что nginx не может найти и передать запрос сокету gunicorn.

Я использую nginx 1.14.0, Django 2.2.1, Python 3.6.7, gunicorn 19.9.0 и PostgreSQL 10.8.

Это моя конфигурация nginx

server {
        listen 80;
        server_name localhost;

        location /favicon.ico { access_log off; log_not_found off; }
        location /static/ {
                alias /home/django/myproject/myproject;
        }

        location / {
                include proxy_params;
                proxy_pass http://unix:/run/gunicorn.sock;
        }
}

А это мой gunicorn.sock

[Unit]
Description=gunicorn socket

[Socket]
ListenStream=/run/gunicorn.sock

[Install]
WantedBy=sockets.target

и gunicorn.service

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

[Service]
User=django
Group=www-data
WorkingDirectory=/home/django/myproject/myproject
ExecStart=/home/django/myproject/myproject/myproject/bin/gunicorn \
        --access-logfile - \
        --workers 3 \
        --bind unix:/run/gunicorn.sock \
        MyProject.wsgi:application

[Install]
WantedBy=multi-user.target

Я следовал этому руководству (https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-18-04), гдебольше всего работало, как и ожидалось, но с той разницей, что мой проект не совсем новый, как в учебнике, а клонирован из моего репозитория git (однако, он протестирован и код работает правильно)

Iожидал, что администратор Django будет доступен из моего браузера уже с этим конфигом, но это не так. Я пытаюсь получить доступ к своему IP-адресу из моего браузера, и я получаю Welcome to nginx, но также 404, если я посещаю /admin. Кроме того, gunicornлоги показывают, нет необходимостиsts.

С другой стороны, если я захожу через SSH на свой сервер и выполняю curl --unix-socket /run/gunicorn.sock localhost, я вижу в журналах gunicorn запрос, выполненный curl.

Любая помощьдобро пожаловать .. Я был здесь часами и не смог получить ни одного запроса извне сервера.

PD: это также не связано с портами на сервере, так как при доступекорень моего IP, я получаю ответ nginx.Просто кажется, что у Nginx вообще нет настроек.

Ответы [ 2 ]

1 голос
/ 02 июня 2019

в вашей конфигурации nginx, вы должны использовать правильное имя_сервера вместо localhost

  server_name mydomain.com;

Если нет, вы вернетесь к серверу nginx по умолчанию, который вернет сообщение «welcome to nginx». Вы можете изменить виртуальный сервер по умолчанию, изменив порядок серверов, удалив nginx по умолчанию или используя параметр default_server. Вы также можете прослушивать несколько имен серверов.

  listen      80 default_server;
  server_name mydomain.com localhost;

Если поле заголовка хоста не соответствует имени сервера, NGINX Plus направляет запрос на сервер по умолчанию для порта, на который поступил запрос. Сервер по умолчанию является первым, перечисленным в файле nginx.conf, если только вы не включили параметр default_server в директиву listen, чтобы явно назначить сервер в качестве сервера по умолчанию.

https://docs.nginx.com/nginx/admin-guide/web-server/web-server/#setting-up-virtual-servers

Помните, что вы должны перезагрузить конфигурацию nginx после внесения изменений. sudo nginx -s reload например.

0 голосов
/ 02 июня 2019

Наконец-то у меня все работает нормально.Вы были правы насчет конфигурации nginx, хотя моей реальной проблемой было не удалить / изменить файл конфигурации по умолчанию для nginx в папке sites_enabled.Таким образом, когда я настраивал listen 80 default_server, я получил следующую ошибку

[emerg] 10619 # 0: дубликат сервера по умолчанию для 0.0.0.0:80 в / etc / nginx / sites-enabled /mysite.com:4

В любом случае, у меня была проблема со статическими файлами, которые я до сих пор не знал, почему это так работает.Мне нужно было установить DEBUG = True, чтобы иметь возможность видеть статические файлы модуля администратора.

Я продолжу исследовать правильный способ подачи статических файлов в производство для панели администратора.

Большое спасибо за помощь!

...