Docker部署Nginx反向代理FastAPI及两个Streamlit应用时Streamlit报404问题求助
Docker部署Nginx反向代理Streamlit404问题修复方案
错误根因
- Nginx匹配顺序错误:默认前缀匹配优先级下,你将通用匹配
location /放在最前,所有请求都会被优先转发到FastAPI服务,FastAPI没有/stream1//stream2路由,直接返回404。 - Streamlit未配置基础路径:Streamlit默认在根路径提供服务,你Nginx转发时带了
/stream1//stream2前缀,Streamlit识别不到对应路径,也会返回404。 - 部分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
相关产品推荐
相关产品推荐

