部署在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
相关产品推荐
相关产品推荐

