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

Flask-SocketIO示例在CentOS的Gunicorn部署下报400及无效会话错误

解决Flask-SocketIO在Gunicorn下的无效会话与400错误问题

你遇到的核心问题是Gunicorn默认的同步worker不支持WebSocket协议——Flask-SocketIO依赖异步worker(Eventlet或Gevent)来处理长连接的WebSocket请求,而你当前的启动命令用的是默认sync worker,这就导致了会话失效、WebSocket升级失败的情况。

第一步:修正Gunicorn启动命令

必须明确指定使用Eventlet worker,并且保持单worker运行(多worker会导致会话无法共享,官方示例不需要分布式会话存储)。修改后的启动命令如下:

gunicorn -w 1 -k eventlet -b 127.0.0.1:5000 app:app

其中-k eventlet是关键参数,它告诉Gunicorn使用支持异步和WebSocket的Eventlet worker。

第二步:验证Nginx反向代理配置(若使用)

如果用Nginx做反向代理,必须确保它能正确转发WebSocket的升级请求。在你的Nginx server块中添加以下配置:

location /socket.io {
    proxy_pass http://127.0.0.1:5000;
    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;
}

这段配置会把WebSocket的升级请求正确传递给Gunicorn,避免出现400错误。

第三步:确认依赖版本兼容性

确保你的Flask-SocketIO、Eventlet和Gunicorn版本兼容,推荐使用经过验证的稳定组合:

  • Flask-SocketIO >= 4.3.0
  • Eventlet >= 0.30.0
  • Gunicorn >= 20.0.0

可以用pip list检查当前版本,如有不兼容情况,执行更新:

pip install --upgrade flask-socketio eventlet gunicorn

额外排查点

  • 若之前尝试过多worker,先清理残留的Gunicorn进程,再用单worker启动。
  • 检查服务器防火墙是否开放了对应端口,确保WebSocket连接能正常建立。

按照这些步骤操作后,你的Flask-SocketIO应用应该能在Gunicorn+Eventlet架构下正常运行,不会再出现无效会话和400错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:14:50