You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS Ubuntu通过Nginx部署Django Channels并解决WebSocket问题

解决Django Channels + Nginx部署中WebSocket无法连接的问题

核心原因

Gunicorn是WSGI服务器,仅能处理HTTP请求,无法支持WebSocket这类ASGI协议的长连接请求。而Django Channels依赖ASGI协议,必须使用ASGI服务器(比如Daphne)来运行应用。

解决方案步骤

1. 使用Daphne启动ASGI应用

替换原Gunicorn启动命令,改用Daphne运行你的ASGI应用:

daphne app.asgi:application -b 0.0.0.0:8000

注意:命令中是app.asgi:application而非app.wsgi,对应项目根目录下的asgi.py文件。

若需要后台运行,可配合nohup或配置systemd服务:

nohup daphne app.asgi:application -b 0.0.0.0:8000 > daphne.log 2>&1 &

2. 修改Nginx配置以支持WebSocket代理

更新Nginx配置,添加WebSocket代理所需的头部和长连接设置:

server {
    listen 80;
    server_name 52.77.215.218;

    location / {
        include proxy_params;
        proxy_pass http://localhost:8000/;
        # WebSocket相关配置
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        # 长连接超时设置,避免连接被过早断开
        proxy_connect_timeout 7d;
        proxy_send_timeout 7d;
        proxy_read_timeout 7d;
    }
}

修改后重启Nginx生效:

sudo systemctl restart nginx

3. 确认Redis服务正常运行

Channels依赖Redis作为通道层,确保Redis服务处于运行状态:

# 检查Redis状态
sudo systemctl status redis-server
# 若未启动则启动服务
sudo systemctl start redis-server
# 设置开机自启
sudo systemctl enable redis-server

4. 验证ASGI配置正确性

确保项目根目录的asgi.py文件正确配置了Channels路由,示例如下:

import os
import django
from channels.routing import ProtocolTypeRouter, URLRouter
from django.core.asgi import get_asgi_application

# 设置Django环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'app.settings')
django.setup()

# 导入你的WebSocket路由(根据实际项目路径调整)
from app.routing import websocket_urlpatterns

application = ProtocolTypeRouter({
    "http": get_asgi_application(),
    # 处理WebSocket请求
    "websocket": URLRouter(websocket_urlpatterns),
})

5. 测试WebSocket连接

可以使用wscat工具测试连接(需先安装Node.js):

# 安装wscat
npm install -g wscat
# 替换为你的WebSocket端点路径
wscat -c ws://52.77.215.218/ws/

若连接成功,会显示connected (press CTRL+C to quit),此时可发送消息测试双向通信。

内容的提问来源于stack exchange,提问作者Abdulaziz Aziz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 16:16:13