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等接口无法访问。
核心问题分析
- NGINX配置覆盖不全:仅配置了
/face_ai的转发规则,未覆盖/home等其他接口;且/face_ai规则中的try_files会优先查找本地文件,拦截了转发请求。 - 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
验证步骤
- 重启NGINX服务:
sudo systemctl restart nginx - 重新构建并启动Docker容器:
docker-compose up --build -d - 访问域名下的接口,如
https://ai.buyume.io/home、https://ai.buyume.io/face_ai,确认可正常访问。
内容的提问来源于stack exchange,提问作者Pranjal Tripathi
相关产品推荐
相关产品推荐

