Nginx с Дафной выдает 502 неисправных шлюза

#django #nginx #django-channels #daphne

#django #nginx #django-каналы #дафна

Вопрос:

Я решил заменить uwsgi на daphne, поскольку у меня возникли проблемы с каналами Django и uwsgi. После выполнения этого руководства. Я настроил свой nginx таким образом с поддержкой сайтов. Большинство других примеров, с которыми я сталкивался, не используют daphne, поэтому я не мог к ним относиться.

  server {
        # the port your site will be served on
        listen      80;
        server_name .MyDomain.com;
        charset     utf-8;

        # max upload size
        client_max_body_size 75M;   # adjust to taste

        # Django media
        location /media  {
            # your Django project's media files - amend as required
            alias /home/ec2-user/MyDomainVenv/MyDomainWeb/media;
        }

        location /static {
            # your Django project's static files - amend as required
            alias /home/ec2-user/MyDomainVenv/MyDomainWeb/static;
        }


            location / {
                proxy_pass http://0.0.0.0:8001;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";

                proxy_redirect     off;
                proxy_set_header   Host $host;
                proxy_set_header   X-Real-IP $remote_addr;
                proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header   X-Forwarded-Host $server_name;
            }
    }
  

Я запустил Daphne, используя этот способ

 daphne main.asgi:channel_layer
  

и рабочий поток, использующий

 python manage.py runworker
  

Это мой asgi.py

 import os
from channels.asgi import get_channel_layer

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "main.settings")

channel_layer = get_channel_layer()
  

есть предложения о том, что может пойти не так?

Я попытался получить доступ к своему веб-сайту, и вот что я получил

 ==> /var/log/nginx/error.log <==
2019/03/23 07:13:21 [error] 22191#0: *4 connect() failed (111: Connection refused) while connecting to upstream, client: 71.231.182.18, server: MyDomain.com, request: "GET /admin/ HTTP/1.1", upstream: "http://0.0.0.0:8001/admin/", host: "www.MyDomain.com"

==> /var/log/nginx/access.log <==
71.231.182.18 - - [23/Mar/2019:07:13:21  0000] "GET /admin/ HTTP/1.1" 502 575 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36" "-"
  

Это то, что я получаю, когда запускаю daphne

 daphne main.asgi:channel_layer
Starting server at tcp:port=8000:interface=127.0.0.1, channel layer main.asgi:channel_layer.
HTTP/2 support not enabled (install the http2 and tls Twisted extras)
Using busy-loop synchronous mode on channel layer
Listening on endpoint tcp:port=8000:interface=127.0.0.1
  

Комментарии:

1. Пожалуйста, проверьте свои журналы django, чтобы узнать точную причину ошибки. Журналы Nginx в этом случае не сильно помогают.

2. Вы пробовали запускать это daphne main.asgi:channel_layer в консоли? Все прошло хорошо? Я сомневаюсь.

3. @spiritsree да, он запущен и успешно

4. Более того, proxy_pass http://0.0.0.0:8001 работают ли каналы на порту 8001? Что запущено на порту 8001?

5. Я думаю, что уровень канала находится на 8000. Я обновил сообщение выводом daphne

Ответ №1:

daphne отстает nginx . Итак, вам нужно добавить это в качестве восходящего потока в ваш nginx conf.

Предполагая, что daphne он запущен на порту 8001, а django приложение — на 80

 upstream channels-backend {
    server 0.0.0.0:8001;
}
  

и обновляет как

 proxy_pass http://channels-backend;