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

部署到域名后Django WebSocket出现404错误求助

问题分析

从ASGI日志能看到,到达ASGI服务的请求路径是/chat/1/,但你的WebSocket路由定义的是ws/chat/<str:room_name>/,路径不匹配直接导致404错误。核心问题出在Nginx的转发规则和WebSocket协议支持配置上。

解决方案

1. 修正Nginx的WebSocket转发路径

你的Nginx配置里,location /ws/下的proxy_pass末尾带了斜杠,这会让Nginx把请求路径中的/ws/部分替换为空,将/ws/chat/1/转发成/chat/1/,而ASGI服务期望接收完整的/ws/chat/1/路径。

修改Nginx配置如下:

location /ws/ {
    proxy_pass http://app-development-asgi;  # 去掉末尾的斜杠
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    # 新增WebSocket协议必需的头信息
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

2. 确认ASGI路由匹配逻辑

你的ASGI配置中,WebSocket路由已经正确定义了ws/chat/<str:room_name>/,修正Nginx转发规则后,ASGI服务会收到完整的/ws/chat/1/请求,就能匹配到对应的ClubFeedConsumer。

3. 处理WSS(WebSocket over SSL)协议问题

如果要使用wss://协议,需要在Nginx中配置SSL证书并监听443端口:

server {
    listen 443 ssl;
    server_name domain_name;

    ssl_certificate /path/to/your/cert.pem;
    ssl_certificate_key /path/to/your/private.key;

    # 其余static、media、ws、/的location配置保持不变
}

同时要确保EC2实例的安全组开放443端口。

4. 验证配置生效

修改Nginx配置后,重启Nginx服务:

nginx -s reload

之后用Postman测试ws://mydomain.com/ws/chat/1/(配置SSL后用wss://),此时ASGI日志应显示请求路径为/ws/chat/1/,404问题即可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 06:53:26