问题1
Nginx 配置导致 FastAPI 接口和验证码请求失败
问题描述
现象:在代理模式(
APP_IS_PROXY = true)下,前端 Dash 应用的/getInfo和/captchaImage接口失败,后端日志显示收到/prod-api/prod-api/getInfo和/prod-api/prod-api/captchaImage,返回 404。前端日志显示“请求异常”。正常情况:设置
APP_IS_PROXY = false,前端直接请求127.0.0.1:9099,接口和验证码正常。问题图片:


问题原因

- 路径重复:
- 应用配置:
APP_IS_PROXY = true,APP_PROXY_PATH = '/prod-api',前端请求http://dfa.mxdx.com/prod-api/getInfo。 - FastAPI 期望
/prod-api/getInfo或/prod-api/captchaImage,但收到/prod-api/prod-api/getInfo。 - 原因:前端可能重复添加
/prod-api,Nginx 的rewrite因未知原因不剥离一层前缀。 - 例子:前端请求
/prod-api/prod-api/getInfo→ Nginx 转发/prod-api/getInfo→ FastAPI 404。
- 应用配置:
- Nginx 配置问题:
- 原配置用
/api/和端口8000,不匹配APP_PROXY_PATH = '/prod-api'和APP_BASE_URL = '127.0.0.1:9099'。 rewrite规则未能处理双重/prod-api。
- 原配置用
- 非代理模式正常:
APP_IS_PROXY = false时,前端直接请求127.0.0.1:9099/prod-api/getInfo,路径正确。
核心原因:前端重复添加 /prod-api,Nginx 未完全剥离,导致 FastAPI 收到错误路径(如 /prod-api/getInfo)。
解决方案
关闭代理模式:
- 设置:
APP_IS_PROXY = false - 效果:前端直接请求
127.0.0.1:9099/prod-api/getInfo,绕过 Nginx,接口和验证码正常。 - 例子:请求
http://127.0.0.1:9099/prod-api/captchaImage→ FastAPI 返回 200。 - 缺点:不适合生产环境,暴露后端端口。
- 设置:
修改代理路径:
设置:
APP_PROXY_PATH = '/'或者置空效果:前端请求
http://dfa.mxdx.com/prod-api/getInfo,Nginx 直接转发到127.0.0.1:9099/prod-api/getInfo,无需剥离前缀。例子:请求
http://dfa.mxdx.com/prod-api/captchaImage→ FastAPI 日志GET /captchaImage HTTP/1.1 200 OK成功图片:
