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

如何解决Streamlit应用WebSocket连接问题?页面一直显示“请等待”

Streamlit应用部署后页面持续显示“请等待”的排查与解决

问题背景

  • 通过streamlit-launchpad运行Streamlit应用文件
  • 部署环境:云K8s集群(Linux容器),使用Nginx Ingress Controller暴露服务
  • 已修复Sec-Websocket-Extensions头问题,但页面始终显示“请等待”
  • Pod日志持续重复st-allowed-message-origins请求及WebSocket连接尝试

关键日志信息

Pod重复输出以下核心内容:

INCOMING URL: st-allowed-message-origins
GET : localhost:8500 / st-allowed-message-origins
WEBSOCKET OPENING ON ws://localhost:8500/stream

解决方案步骤

1. 配置正确的Streamlit路径前缀

由于应用部署在/streamlit/stream33.py/路径下,需确保Streamlit启动时指定--server.baseUrlPath参数,匹配外部访问路径。检查streamlit-launchpad的启动逻辑,确保传递以下参数给Streamlit进程:

--server.baseUrlPath=/streamlit/stream33.py

2. 修正Nginx Ingress的WebSocket转发配置

Ingress需正确处理WebSocket协议,添加必要注解和路由规则:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: streamlit-ingress
  annotations:
    nginx.ingress.kubernetes.io/websocket-services: "your-streamlit-service-name" # 替换为你的Service名称
    nginx.ingress.kubernetes.io/configuration-snippet: |
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
spec:
  rules:
  - host: abc.com
    http:
      paths:
      - path: /streamlit/stream33.py(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: your-streamlit-service-name
            port:
              number: 8500

3. 调整Streamlit的CORS与消息源权限

日志中重复的st-allowed-message-origins请求表明Streamlit在验证消息来源,需配置允许的源或关闭CORS限制:

  • 允许指定来源(推荐):添加参数--server.allowedMessageOrigins=https://myorigin
  • 临时关闭CORS:添加参数--server.enableCORS=false

确保上述参数被传递给streamlit-launchpad启动的Streamlit进程。

4. 验证WebSocket路径一致性

前端请求的WebSocket路径为wss://abc.com/streamlit/stream33.py/stream,需确保Streamlit后端预期的路径与之一致。结合--server.baseUrlPath配置,后端应接收/streamlit/stream33.py/stream路径的WebSocket请求,而非/stream。检查Ingress路径规则是否正确转发该路径到Streamlit服务。

5. 检查Ingress路径重写规则

若Ingress使用了路径重写,确保规则未破坏WebSocket路径结构。例如,避免将/streamlit/stream33.py/stream错误重写为/stream,除非已通过--server.baseUrlPath配置了正确的前缀。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 07:03:14