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

Django项目配置SSL后wss协议WebSocket连接失败问题求助

问题排查与解决步骤

核心配置冲突点

你当前的配置存在三处明显错误,直接导致wss连接失败:

  1. Daphne启动时配置了SSL,8001端口仅接受wss协议请求,但Nginx的/ws/代理是用http协议转发请求到8001,协议不匹配
  2. Nginx的/ws/代理配置中proxy_pass末尾带了斜杠,会把请求路径中的/ws/前缀截断,导致Daphne匹配不到路由
  3. 前端直接请求8001端口的wss地址,不仅绕开了Nginx的SSL统一入口,且服务器公网通常未开放8001端口的外部访问权限

修复步骤

1. 修正Daphne服务配置

内网Nginx到Daphne的通信无需额外加密,去掉SSL配置,仅监听本地回环地址即可:
修改daphne.service的ExecStart行:

ExecStart=daphne -b 127.0.0.1 -p 8001 myproject.asgi:application

修改后执行命令重启服务:
systemctl daemon-reload && systemctl restart daphne

2. 修正Nginx代理配置

补全请求头信息,移除proxy_pass末尾的斜杠,保留完整路径转发给Daphne:

location /ws/ {
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    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-Proto $scheme;
    proxy_redirect off;
    proxy_pass http://127.0.0.1:8001;
}

修改后执行命令重启Nginx:
nginx -t && systemctl restart nginx

3. 修改前端WebSocket连接地址

不要携带8001端口,直接通过Nginx的443 SSL端口建立wss连接,地址改为:
wss://www.xxx.com/ws/asdf/1234/


兜底排查方案

如果按上述步骤修改后仍连接失败,按顺序排查:

  • 查看Daphne运行日志:journalctl -u daphne -f,确认服务正常启动无报错
  • 本地校验Daphne连通性:服务器执行curl http://127.0.0.1:8001/ws/,确认有返回结果
  • 查看Nginx错误日志:tail -f /var/log/nginx/error.log,排查转发阶段的错误
  • 检查Django配置:确认ALLOWED_HOSTS包含你的站点域名,CSRF_TRUSTED_ORIGINS已配置HTTPS前缀的域名
  • 校验Redis服务状态:执行redis-cli ping确认返回PONG,Channels层可以正常连接Redis

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:54:05