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

部署在EC2上的Flask-SocketIO轮询请求出现404错误求助

问题:Socket.io 连接出现404错误(Polling请求失败)

被这个问题卡了好几天,试了GitHub和Stack Overflow上各种方案都没解决。

项目环境与架构

  • 前端:ReactJS,静态构建文件托管在AWS S3
  • 后端:Flask + Flask-SocketIO,通过gunicorn搭配Nginx部署在EC2
  • AWS路由链路:Route53 → CloudFront → 分流至S3(默认路径*)和EC2(/api路径),已配置自定义域名及ACM证书,CloudFront与EC2通过HTTP协议连接
  • API请求可正常处理返回,但Socket.io连接失败

报错信息

GET https://www.jungp.online/socket.io/?user_id=1&EIO=4&transport=polling&t=OtLZxOo 404 (Not Found)

相关配置代码

前端React Socket.io连接代码

useEffect(() => {
    const socket = io("https://www.jungp.online", {
        path: '/socket.io',
        query: {
            user_id: Cookies.get("userId")
        }
    });
});

EC2安全组配置

安全组配置截图

Nginx配置

map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

server {
    listen 80;
    server_name www.jungp.online;

    location / {
        proxy_pass http://127.0.0.1:8080;
        include /etc/nginx/proxy_params;
        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-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
    }

    location /socket.io {
        proxy_pass http://127.0.0.1:8080/socket.io;
        include /etc/nginx/proxy_params;
        proxy_http_version 1.1;
        proxy_buffering off;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $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;
    }
}

后端启动命令

gunicorn -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker -b 0.0.0.0:8080 wsgi:app

Flask后端核心代码

app.py:

app = Flask(__name__)
socketio = SocketIO(app, path='/socket.io', cors_allowed_origins="*")
CORS(app)

wsgi.py:

from app import socketio, app
if __name__ == "__main__":
    socketio.run(app, host="0.0.0.0", port=8080)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 05:11:15