Daphne + Django Rest Framework无法建立WSS连接求助
问题分析
你的Daphne服务当前仅配置为监听明文HTTP/WebSocket(ws)请求,未启用SSL/TLS支持,因此无法处理加密的WSS连接。从启动日志可以看到,Daphne仅启动了常规TCP端点,没有加载SSL证书相关配置。
解决方案
要启用WSS,需要给Daphne配置SSL证书和密钥,以下是具体步骤:
1. 生成自签名SSL证书(开发环境)
如果是开发测试场景,可通过OpenSSL生成自签名证书:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
执行后会生成key.pem(私钥)和cert.pem(证书),将这两个文件放到项目根目录。
2. 修改Docker Compose中Daphne的启动命令
更新docker-compose.yml里的daphne服务启动命令,添加SSL相关参数:
daphne: platform: linux/amd64 build: context: . dockerfile: Dockerfile.dev command: 'sh -c "daphne -v 3 --access-log daphne.log -b 0.0.0.0 -p 8000 --ssl-certfile /app/cert.pem --ssl-keyfile /app/key.pem apps.asgi:application"' restart: always working_dir: /app volumes: - ./:/app - /var/run/docker.sock:/var/run/docker.sock
注:证书和私钥通过volumes映射到了容器内的/app目录,路径需与容器内位置对应。
3. 重启服务
执行命令重启Daphne服务,使配置生效:
docker-compose up -d --force-recreate daphne
4. 测试WSS连接
现在可以使用wss://127.0.0.1:8000/ws/notifications/发起连接。开发环境中,浏览器可能会提示证书不安全,手动选择信任即可。
额外注意事项
- 生产环境必须使用正规CA颁发的SSL证书,禁止使用自签名证书
- 若前端部署在HTTPS域名下,WSS请求需使用对应域名的匹配证书,避免跨域及证书不匹配问题
- 检查服务器防火墙是否开放了8000端口的TCP流量
内容的提问来源于stack exchange,提问作者Neo
相关产品推荐
相关产品推荐

