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

Django聊天应用生产环境部署后WebSocket连接失败问题咨询

Django聊天应用WebSocket部署报错排查方案

问题根因

  • 路径匹配不一致:当前WebSocket请求地址为wss://site.com/messages/user,但Nginx配置中仅对/ws/前缀的请求做了WebSocket升级代理,该请求未匹配到对应规则,Nginx不会将其转发到后端Django Channels服务,直接导致连接失败。
  • 开发环境无Nginx反向代理,请求直接到达Django服务因此可以正常运行,生产环境新增Nginx层后规则不匹配,才触发报错。

解决方法

可任选以下一种方案适配:

方案1:调整前端WebSocket请求路径(推荐)

修改前端JS代码,给WebSocket请求路径统一增加/ws/前缀,和现有Nginx配置匹配:

<script src="https://cdnjs.cloudflare.com/ajax/libs/reconnecting-websocket/1.0.0/reconnecting-websocket.min.js" integrity="anonymous"></script>

var loc = window.location
var wsStart = 'ws://'
if (loc.protocol == 'https:'){
    wsStart = 'wss://'
}
// 新增/ws前缀匹配Nginx规则
var endpoint = wsStart + loc.host + '/ws' + loc.pathname
var socket = new ReconnectingWebSocket(endpoint)

修改后同步调整Django Channels的路由配置,匹配带/ws/前缀的路径即可。

方案2:修改Nginx代理规则适配现有路径

如果不需要统一路径规范,可直接修改Nginx配置,让/messages/前缀的请求也走WebSocket代理:

location /messages/ {
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_redirect off;
    proxy_pass http://127.0.0.1:8001;
}

验证步骤

修改完成后执行nginx -s reload重载Nginx配置,刷新页面重新测试WebSocket连接即可。如果仍有报错可排查两个常见配置项:

  • 确认后端Django Channels服务(daphne/uvicorn等)正常监听在127.0.0.1:8001端口
  • 确认Django配置文件中ALLOWED_HOSTS包含域名site.com,Channels路由和请求路径匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 12:45:05