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

IP映射域名后NGINX无法转发FastAPI接口请求问题排查

问题解决:通过域名访问所有FastAPI接口

问题概述

使用Docker和FastAPI部署Web应用,Docker端口映射为5000:8888,尝试通过NGINX将IP:5000/face_ai的POST请求转发到域名ai.buyume.io/face_ai。当前可通过域名访问FastAPI根路径,但/home、/face_ai等接口无法访问。

核心问题分析

  1. NGINX配置覆盖不全:仅配置了/face_ai的转发规则,未覆盖/home等其他接口;且/face_ai规则中的try_files会优先查找本地文件,拦截了转发请求。
  2. Dockerfile存在语法错误:多个FROM指令会导致仅最后一个基础镜像生效,前面的镜像配置被忽略,可能引发依赖缺失问题。

修正后的配置

1. NGINX配置(完整转发所有FastAPI请求)

替换原NGINX配置,将域名下所有请求转发到FastAPI容器:

server {
    listen 80;
    server_name ai.buyume.io; # managed by Certbot

    # 转发所有请求到FastAPI容器
    location / {
        proxy_pass http://ip:5000;
        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;
    }

    # 若有静态文件需单独处理,可添加如下配置(可选)
    # location /static {
    #     root /var/www/html;
    # }
}
  • 移除try_files指令,确保请求直接转发到FastAPI而非查找本地文件。
  • 使用location /覆盖所有路径,包括/home、/face_ai及根路径。

2. Dockerfile配置(修复多FROM问题)

保留一个基础镜像,删除多余的FROM指令:

# 选择合适的基础镜像,这里保留tensorflow的GPU镜像
FROM tensorflow/tensorflow:latest-gpu

COPY . .

ENV TZ=Asia/Dubai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt-get -y update && apt install -y tzdata

ENV LOG_LEVEL=DEBUG
ENV CUDA_LAUNCH_BLOCKING=1

RUN apt-get -y update && \
    apt-get install -y python3-dev python3-pip libffi-dev libssl-dev libcairo2 libcairo2-dev libgirepository1.0-dev pkg-config && \
    pip install --no-cache-dir -r ./requirements.txt && \
    apt-get update && \
    apt-get install ffmpeg libsm6 libxext6 tree -y

ENV LD_LIBRARY_PATH /usr/local/cuda/lib64:$LD_LIBRARY_PATH

CMD ["uvicorn", "main:buyume_app", "--host", "0.0.0.0", "--port", "8888"]
  • 合并多个RUN指令,减少镜像层数。
  • 仅保留一个FROM指令,确保基础镜像配置生效。

3. Docker-Compose配置(无需修改)

原配置已正确映射端口和挂载目录,保持不变:

version: '3'
services:
  fastapi:
    build:
      context: ./
      dockerfile: Dockerfile.cpu
    environment:
      - LOG_LEVEL=DEBUG
      - CUDA_LAUNCH_BLOCKING=1
    ports:
      - "5000:8888"
    volumes:
      - ./app:/code/app
    runtime: nvidia

验证步骤

  1. 重启NGINX服务:sudo systemctl restart nginx
  2. 重新构建并启动Docker容器:docker-compose up --build -d
  3. 访问域名下的接口,如https://ai.buyume.io/home、https://ai.buyume.io/face_ai,确认可正常访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 17:04:56