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

Nginx反向代理Docker部署FastAPI如何免逐个配置端点

问题根因

配置不生效的核心是Nginx proxy_pass 的路径拼接规则:当proxy_pass后面的上游地址不带任何URI路径(即你当前写的http://api形式),Nginx会把客户端请求的完整原始路径直接透传给后端服务。
比如你请求http://localhost:3000/api/day?day_num=5时,Nginx转发给FastAPI的实际路径是/api/day,但你代码里注册的接口路径是/day,后端找不到对应路由自然报错。你之前单独写的location /api/day规则本质是手动做了路径替换,把/api/day映射到后端的/day,所以能通,但每个接口都写一遍规则维护成本极高。

通用解决方案

只需要修改nginx-setup.conf里的/api/匹配规则,在proxy_pass的上游地址末尾加一个斜杠/,就能自动剥离请求路径里的/api/前缀,不需要为每个端点单独写配置。
修改后的完整Nginx配置如下:

upstream api {
    server backend:8000;
}

server {
    listen 8080;

    location /api/ {
        # 注意末尾必须加/,会自动将请求路径中匹配到的/api/前缀替换为/
        proxy_pass http://api/;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

修改完成后直接删掉之前单独写的location /api/day规则即可,所有/api/*的请求都会自动按规则转发:

  • 访问http://localhost:3000/api/day?day_num=5 → 后端收到路径/day?day_num=5,匹配业务接口
  • 访问http://localhost:3000/api/docs → 后端收到路径/docs,正常加载Swagger文档
  • 访问http://localhost:3000/api/openapi.json → 后端收到路径/openapi.json,正常返回接口文档数据
  • 后续新增任意FastAPI端点,都不需要修改Nginx配置,直接访问/api/对应端点路径即可
配置校验说明

你docker-compose.yml里给uvicorn加的--root-path /api参数是正确的,这个参数会让FastAPI自动识别反向代理的路径前缀,自动处理文档内的接口路径、静态资源引用地址,不会出现文档打开后资源加载失败、接口请求404的问题。
改完Nginx配置后执行以下命令重启Nginx容器即可生效:
docker compose restart nginx

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:27:21