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

Docker+Nginx环境下Django实时聊天应用WebSocket无法访问问题排查

Django + Docker + Nginx 环境下WebSocket路径未找到问题排查

基于Django开发的实时聊天应用部署在Docker+Nginx环境中时,出现WebSocket无法正常工作的问题,应用提示/ws/socket-server/路径未找到。结合你提供的配置文件,以下是具体排查点和修正建议:

1. Nginx配置语法错误

你的nginx.conf中WebSocket配置段的Connection头使用了中文引号,这会导致Nginx解析失败,无法正确处理WebSocket协议升级请求,最终请求被当作普通HTTP请求处理,后端返回404。

修正后的Nginx WebSocket配置:

location /ws/socket-server/ {
    proxy_pass http://project;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";  # 改为英文双引号
    proxy_redirect off;
    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-Host $server_name;
}

2. 确认ASGI服务器启动方式

Django Channels依赖ASGI协议处理WebSocket请求,不能使用传统的WSGI服务器(如gunicorn)启动应用。你需要在Docker容器中使用ASGI服务器(如daphne或uvicorn)启动项目:

示例启动命令:

  • 使用daphne:
daphne project.asgi:application --bind 0.0.0.0 --port 8000
  • 使用uvicorn:
uvicorn project.asgi:application --host 0.0.0.0 --port 8000

如果Docker启动脚本仍在使用gunicorn,WebSocket请求会被WSGI服务器拒绝,返回404。

3. 补全CHANNEL_LAYERS配置

你的settings.py中CHANNEL_LAYERS只指定了Redis后端,但缺少必要的连接配置,这会导致Channels无法初始化通道层,间接影响WebSocket连接。

修正后的CHANNEL_LAYERS配置:

CHANNEL_LAYERS = {
    'default': {
        'BACKEND': 'channels_redis.core.RedisChannelLayer',
        'CONFIG': {
            "hosts": [('redis', 6379)],  # 'redis'为Docker中Redis服务的容器名,根据实际情况修改
        },
    },
}

4. 优化WebSocket路由匹配

你的routing.py中路由正则未添加结尾锚定符$,虽然当前请求路径可以匹配,但添加后能确保精确匹配,避免不必要的路由冲突:

修正后的路由配置:

from django.urls import re_path
from . import consumers

websocket_urlpatterns = [
    re_path(r'ws/socket-server/$', consumers.ChatConsumer.as_asgi())
]

5. 验证跨域与CSRF配置

检查CSRF_TRUSTED_ORIGINS和CORS_ALLOWED_HOSTS是否与前端实际访问地址一致。如果前端是通过http://localhost(80端口)访问,而不是http://localhost:1337,需要修改配置:

CSRF_TRUSTED_ORIGINS = ['http://localhost']
CORS_ALLOWED_HOSTS = ['http://localhost']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:01:04