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

在DigitalOcean应用平台部署Django+Channels时WebSocket配置问题排查

问题分析与解决方案

核心问题1:前端WebSocket连接地址错误

你的前端代码硬编码了本地开发地址ws://127.0.0.1:8000/ws/waitlist/,部署到DigitalOcean后:

  • 必须替换为生产环境域名,且因为DO应用平台默认使用HTTPS,WebSocket协议要改为wss
  • 推荐用动态方式获取当前域名,避免硬编码:
// 自动适配ws/wss协议与当前域名
const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
const wb = new WebSocket(`${protocol}//${window.location.host}/ws/waitlist/`);

核心问题2:Channels缺失Redis通道层配置

你的settings.py未配置CHANNEL_LAYERS,Daphne依赖该组件处理WebSocket消息转发,必须添加以下配置:

# 在settings.py中新增
import os

CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "channels_redis.core.RedisChannelLayer",
        "CONFIG": {
            "hosts": [os.environ.get('REDIS_URL')],
        },
    },
}

注:你的REDIS_URL使用rediss://(带SSL的Redis连接),Channels-Redis 3.4.1原生支持该格式,无需额外SSL配置。

核心问题3:验证ALLOWED_HOSTS配置

确保settings.py中的ALLOWED_HOSTS包含生产域名:

ALLOWED_HOSTS = ['blah.com', '*.blah.com']

AllowedHostsOriginValidator会校验WebSocket请求的Origin头,只有域名在ALLOWED_HOSTS或CSRF_TRUSTED_ORIGINS范围内的请求才会被通过。

额外检查:DigitalOcean应用端口配置

你的Daphne启动命令指定了-p 8080,需确认DO应用平台的端口设置(App > Settings > Ports)中,容器端口为8080,协议设置为HTTP(Daphne会自动处理WebSocket协议升级)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 02:10:26