Django Channels 没有检测到 NGINX 的 WebSocket 请求

Posted

技术标签:

【中文标题】Django Channels 没有检测到 NGINX 的 WebSocket 请求【英文标题】:Django Channels doesn't detect WebSocket request with NGINX 【发布时间】:2020-10-26 18:24:14 【问题描述】:

我正在 AWS 上部署一个网站。 HTTP 和 HTTPS 一切正常。我将所有请求传递给达芙妮。但是,传入的 WebSocket 连接被 Django 视为 HTTP 请求。我猜有一些头文件没有在 nginx 中设置,但是我从教程中复制了很多我的 Nginx 配置。 Nginx 配置:

upstream django 
        server 127.0.0.1:9000;



server 
        listen 80;

        server_name 18.130.130.126;

        return 301 https://$host$request_uri;


server 
        listen 443 ssl;

        server_name 18.130.130.126;

        ssl_certificate /etc/nginx/certificate/certificate.crt;
        ssl_certificate_key /etc/nginx/certificate/private.key;

        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;


        location / 
                include proxy_params;
                proxy_pass http://django;
        

达芙妮绑定到 0.0.0.0:9000。频道有一个非常基本的设置。一个 ProtocolTypeRouter,带有 AuthMiddlewareStack 和 URLRouter,如 Channels 教程中所示。然后是消费者类。我将 Redis 用于通道层,但这似乎不是问题。这是有关提琴手响应请求的一些数据。请求标头显示升级到 WebSocket,但它返回 404 HTTP 请求,因为它不将其视为 WebSocket 请求。

感谢您的帮助。

【问题讨论】:

【参考方案1】:

包括代理参数是问题所在。它正在覆盖标题。

【讨论】:

以上是关于Django Channels 没有检测到 NGINX 的 WebSocket 请求的主要内容,如果未能解决你的问题,请参考以下文章

django 频道 channels.exceptions.Channels Full

将Django-cookie sessionId链接到Channels 2.02连接?

如何通过 Django Channels 实现视频通话?

Django使用Channels实现WebSocket--下篇

如何处理高传入数据并将受限制的数据发送到 django-channels 中的 Web 套接字

Ubuntu + Django(DRF) + channels(websocket)+NGINX + uwsgi 环境部署