You need to enable JavaScript to run this app. Ubuntu 20.10 Google Cloud VPS中Flask使用flask-sse无法连接Redis求助
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 20.10 Google Cloud VPS中Flask使用flask-sse无法连接Redis求助

Flask结合Flask-SSE连接Redis的排障指南

1. 优先修正连接配置的常见踩坑点

  • 把代码里的app.config["REDIS_URL"] = "redis://localhost"替换为redis://127.0.0.1:6379,避免VPS上localhost默认解析到IPv6地址::1,但Redis默认只监听IPv4的127.0.0.1导致连接拒绝的问题
  • 登录VPS进入项目虚拟环境,执行快速连通性测试:
    python -c "import redis; r = redis.from_url('redis://127.0.0.1:6379'); print(r.ping())"
    返回True就说明网络层面没有连接障碍,如果报错直接根据报错信息定位是权限还是网络问题
  • 如果Redis开启了访问密码,需要把REDIS_URL改成redis://:你的密码@127.0.0.1:6379的格式

2. 修正Gunicorn启动命令的错误

你当前的启动脚本存在两个会直接导致运行异常的问题:

  • 命令末尾多余的server参数是Gunicorn无法识别的无效参数,需要直接删除
  • Unix套接字文件用了相对路径mainsite.sock,Nginx和系统服务找文件的时候容易出现路径不匹配,必须改成绝对路径,比如unix:/home/foo/boo/mainsite.sock
  • 调整后的可正常运行的启动命令参考:
    ExecStart=/home/foo/boo/mainenv/bin/gunicorn --workers 3 --worker-class gevent --bind unix:/home/foo/boo/mainsite.sock -m 007 wsgi:app --log-level debug

3. 适配Nginx对SSE流的处理规则

Flask-SSE是长连接流式响应,Nginx默认开启的缓冲会把流截断,导致前端EventSource报连接失败的错,这类报错往往和Redis本身无关。需要在Nginx的站点配置里,针对/stream路径单独加配置:

  • 关闭代理缓冲、关闭缓存
  • 拉长代理超时时间
  • 透传Connection头
    配置示例:
location /stream {
    proxy_pass http://unix:/home/foo/boo/mainsite.sock;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_buffering off;
    proxy_cache off;
    proxy_read_timeout 24h;
    chunked_transfer_encoding off;
}

4. 修正代码层面的冗余问题

  • 代码块里if __name__ == '__main__'下的http_server.serve_forever()属于未定义变量,开发模式启动时会直接报错,需要删掉
  • 确认wsgi.py的导出逻辑正确:必须保证Gunicorn加载的app实例和你定义了Redis配置、注册了SSE蓝图的app是同一个对象,不然会出现配置不生效的问题

内容的提问来源于stack exchange,提问作者gabriel.dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 03:54:07