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

Nginx代理下Socket IO请求被拒绝问题求助

问题排查与解决方案

核心原因:Socket.IO路径前缀不匹配

通过Nginx访问/app/socket.io/时,客户端发起的Socket.IO握手请求会携带路径/app/socket.io,但后端python-socketio服务默认只监听/socket.io路径,导致握手阶段路径不匹配,连接被中断。

具体修复方案

方案1:调整后端Socket.IO配置适配代理前缀

修改asgi.py中的socketio.ASGIApp初始化代码,指定Socket.IO的处理路径为/app/socket.io:

# 替换原application初始化代码
application = socketio.ASGIApp(sio, django_application, path='/app/socket.io')

当前Postman请求的路径已符合要求,无需调整客户端连接地址。

方案2:调整Nginx配置保持路径一致性

若不想修改后端代码,可调整Nginx的proxy_pass配置,让请求路径完整转发到后端:

location /app/socket.io/ {
        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;
        # 去掉末尾的/socket.io/,保留完整路径转发
        proxy_pass http://app:8000; 
        proxy_read_timeout 86400s;
        proxy_send_timeout 86400s;
}

同时仍需修改asgi.py,让Socket.IO服务监听/app/socket.io路径(同方案1的代码调整)。

额外验证点

  • 检查Django的ALLOWED_HOSTS是否包含Nginx所在主机或*(开发环境),避免主机验证失败中断连接。
  • 查看Uvicorn debug日志,确认收到的请求路径是否符合预期(如是否包含/app/socket.io)。
  • 确认Nginx与Docker容器间网络连通正常,无防火墙或端口映射问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 15:18:13