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

Docker部署Nginx反向代理FastAPI及两个Streamlit应用时Streamlit报404问题求助

Docker部署Nginx反向代理Streamlit404问题修复方案

错误根因

  1. Nginx匹配顺序错误:默认前缀匹配优先级下,你将通用匹配location /放在最前,所有请求都会被优先转发到FastAPI服务,FastAPI没有/stream1//stream2路由,直接返回404。
  2. Streamlit未配置基础路径:Streamlit默认在根路径提供服务,你Nginx转发时带了/stream1//stream2前缀,Streamlit识别不到对应路径,也会返回404。
  3. 部分Nginx路径配置冗余重复,WebSocket升级配置覆盖不全。

修复步骤

1. 修改Nginx配置(default.conf)

将stream相关匹配规则移到通用匹配前,添加^~标识确保前缀匹配优先,修正代理路径和WebSocket配置:

upstream fastapi-backend {
    server app:8000;
}

server {
    listen 80;

    # stream1 配置
    location ^~ /stream1 {
        proxy_pass http://spectrum:8501;
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 86400;
    }

    # stream2 配置
    location ^~ /stream2 {
        proxy_pass http://dgraph:8503;
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 86400;
    }

    # FastAPI 通用匹配放在最后
    location /  {
        proxy_pass http://fastapi-backend;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_redirect off;
        proxy_buffering off;
        client_body_buffer_size 100M;
        client_max_body_size 100M;
    }
}

2. 修改Streamlit启动参数,添加基础路径配置

spectrum应用Dockerfile修改:

FROM python:3.8

COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt

EXPOSE 8501
COPY app1.py /var/dashboard/app1.py
CMD streamlit run /var/dashboard/app1.py --server.address="0.0.0.0" --server.port="8501" --server.baseUrlPath="/stream1"

dgraph应用Dockerfile修改:

FROM python:3.8

COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt

EXPOSE 8503
COPY app2.py /var/dashboard/app2.py
CMD streamlit run /var/dashboard/app2.py --server.address="0.0.0.0"  --server.port="8503" --server.baseUrlPath="/stream2"

3. 重建容器生效

执行以下命令重启所有服务:

docker compose down -v
docker compose up --build -d

配置完成后即可通过http://你的IP/stream1和http://你的IP/stream2正常访问两个Streamlit应用,FastAPI服务不受影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:45:04