带有 Daphne 的 Nginx 给出 502 Bad Gateway

Posted

技术标签:

【中文标题】带有 Daphne 的 Nginx 给出 502 Bad Gateway【英文标题】:Nginx with Daphne gives 502 Bad Gateway 【发布时间】:2019-08-14 03:45:48 【问题描述】:

我决定用 daphne 替换 uwsgi,因为我遇到了 Django Channels 和 uwsgi 的问题。在遵循this 教程之后。我在启用站点的情况下以这种方式配置了我的 nginx。我遇到的大多数其他示例都没有使用达芙妮,所以我无法理解它们。

 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 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 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

【问题讨论】:

请检查您的 django 日志以了解错误的确切原因。在这种情况下,Nginx 日志没有多大帮助。 你试过在控制台中运行这个daphne main.asgi:channel_layer吗?进展顺利吗?我怀疑。 @spiritsree 是的,它正在运行并成功 此外,proxy_pass http://0.0.0.0:8001 是在端口 8001 上运行的通道吗? 8001 端口上正在运行什么? 我认为通道层在 8000。我用 daphne 的输出更新了帖子 【参考方案1】:

daphne 落后于nginx。因此,您需要将其作为上游添加到您的 nginx 配置中。

假设daphne 在端口8001 上运行,django 应用程序在80 上运行

upstream channels-backend 
    server 0.0.0.0:8001;

并更新为

proxy_pass http://channels-backend;

【讨论】:

以上是关于带有 Daphne 的 Nginx 给出 502 Bad Gateway的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 Docker 上使用 NGINX + Gunicorn 时 NGINX 给出 502 Bad Gateway

在带有协议升级的 nginx 反向代理后面运行 daphne 总是路由到 http 而不是 websocket

Django + nginx + gunicorn 给出 502 错误。日志信息很少[关闭]

Django 频道 daphne 返回 200 状态码

运行 Puma 和 Nginx 的带有 AWS Elastic Beanstalk 的 Rails 应用程序 502

在 nginx 后面使用 Daphne