使用 nginx 和 daphne 部署 django、channels 和 websockets

Posted

技术标签:

【中文标题】使用 nginx 和 daphne 部署 django、channels 和 websockets【英文标题】:Deploying django, channels and websockets with nginx and daphne 【发布时间】:2020-06-09 06:33:36 【问题描述】:

我正在尝试使用 nginx 和 daphne 部署一个使用通道和 websockets 的 django 应用程序。

当我使用 uwsgi 时,这是我的 nginx 文件:

upstream django 
        server unix:/run/uwsgi/devAppReporting.sock;


server 
        listen 8090;
        server_name foo.bar.com;
        charset utf-8;

        location /static 
                alias /var/dev-app-reporting/static;
        

        location / 
               uwsgi_pass django;
               include /var/dev-app-reporting/uwsgi_params;
               uwsgi_read_timeout 3600;
               client_max_body_size 50m;
        

现在我把它改成了这样:

upstream django 
        server unix:/run/daphne/devAppReporting.sock;


server 
        listen 8090;
        server_name foo.bar.com;
        charset utf-8;

        location /static 
                alias /var/dev-app-reporting/static;
        

        location / 
            proxy_pass http://0.0.0.0:8090;
            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 -u /run/daphne/devAppReporting.sock app.dse.asgi:application

我收到 502 bad gateway 错误,并在日志中显示:

2020/02/24 22:17:26 [alert] 29169#29169: 768 worker_connections are not enough
2020/02/24 22:17:26 [error] 29169#29169: *131545 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 127.0.0.1, server: dse-portfolio-dev-assessments.md.virtualclarity.com, request: "GET / HTTP/1.1", upstream: "http://0.0.0.0:8090/", host: "xx.xx.xx.xx"

关于我应该在我的配置文件中包含什么以使其工作的任何想法?

【问题讨论】:

您可能需要代理传递其他 websocket 握手标头。请参阅 Client handshake request developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/… 【参考方案1】:

我得到了这个工作。解决方法是将 proxy_pass 行更改为:

proxy_pass http://django;

【讨论】:

以上是关于使用 nginx 和 daphne 部署 django、channels 和 websockets的主要内容,如果未能解决你的问题,请参考以下文章

使用 Daphne 和 Nginx 部署 django 频道的问题

使用 SSL 使用 Daphne + NGINX 部署 Django 通道

在 nginx 后面使用 Daphne

使用daphne部署django channles websocket 项目

Django 通道 websocket 连接和断开连接(Nginx + Daphne + Django + Channels)

django3,websocket,asgi,daphne,nginx 结合使用示例