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

如何访问Docker部署的FastAPI后端?排查访问异常及配置问题

FastAPI后端访问问题解决方案

1. 解决直接访问服务器IP+8000端口失败的问题

  • 开放服务器端口:检查服务器防火墙/云服务商安全组,确保8000端口允许入站流量。例如使用ufw防火墙时执行:
    ufw allow 8000/tcp
    ufw reload
    
  • 验证容器内服务状态:进入Docker容器,确认FastAPI服务正常运行:
    docker exec -it <容器ID或名称> curl http://localhost:8000
    
    若返回FastAPI默认JSON响应,说明容器内服务正常;若失败,检查Docker日志是否存在Uvicorn running on http://0.0.0.0:8000启动日志,确认服务已启动。
  • 确认Docker端口映射:执行docker ps查看容器端口映射,确保PORTS列显示0.0.0.0:8000->8000/tcp或:::8000->8000/tcp,说明端口映射生效。

2. 修复Nginx反向代理路由问题

当前Nginx配置的路径匹配逻辑存在问题,导致请求无法正确转发,以下两种方案二选一:

方案A:调整Nginx proxy_pass配置(推荐)

修改Nginx的location块,给proxy_pass添加末尾斜杠,让Nginx自动去除/backend/前缀:

server {
    listen 8080;
    server_name admin.example.com;

    location /backend/ {
        proxy_pass http://127.0.0.1:8000/;  # 添加末尾斜杠
        proxy_set_header Host $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;
    }
}

修改后重启Nginx:

sudo systemctl restart nginx

此时访问https://admin.example.com:8080/backend/docs会转发到http://127.0.0.1:8000/docs,匹配FastAPI默认路由。

方案B:给FastAPI添加路由前缀

若不想修改Nginx,可在FastAPI中配置路由前缀:

  • 方式1:修改Docker启动命令(Dockerfile中CMD):
    CMD ["uvicorn", "db:app", "--host", "0.0.0.0", "--port", "8000", "--root-path", "/backend"]
    
  • 方式2:在FastAPI代码中配置:
    from fastapi import FastAPI
    
    app = FastAPI(root_path="/backend")
    

修改后重新构建并启动容器:

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

3. 解决CORS跨域问题

在FastAPI应用中添加CORS中间件,允许前端域名跨域请求:

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

app = FastAPI()

# 配置允许跨域的源
origins = [
    "https://www.admin.example.com",
    # 若需本地开发调试,可添加 "http://localhost:3000"
]

app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

# 你的业务路由代码...

修改后重新构建Docker镜像并启动容器。

4. 验证配置

  • 访问https://admin.example.com:8080/backend,应显示FastAPI默认响应页面;
  • 前端将请求地址改为https://admin.example.com:8080/backend,测试接口调用是否正常,且无CORS错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:13:27