Files
iAOP/deploy/fba/nginx-fba.conf
T
bot_dev1 5667fad3e1 fix(#188): 推理 API 路径规范化,消除双 /v1 前缀对 nginx rewrite 的隐式依赖
问题:infer.ts BASE_URL=/v1,fetchModels/chatCompletion 再拼 /v1/* 导致
/v1/v1 双前缀,当前仅靠 nginx 对 /v1/ rewrite 去前缀巧合耦合才通。

修复(前后端+部署一起改):
1. nginx-fba.conf:新增 location /v1/,proxy_pass http://127.0.0.1:30800/
   (带末尾 /,不去前缀直接透传),消除对 rewrite 的隐式依赖。
2. infer.ts:BASE_URL 改为空串,调用方统一写 /v1/models、
   /v1/chat/completions、/v1/health(fetchHealth 原误用 /health 已修正)。
3. cockpit/index.vue:健康检查改走 infer.ts 的 fetchHealth 封装,
   不再裸 fetch('/v1/health'),路径口径统一。
4. ask() latencyMs 由硬编码 0 改为 performance.now() 实测耗时。
5. README 补充推理通道路径约定说明。

验收:浏览器 Network 确认 /v1/models、/v1/chat/completions、
/v1/health 均 200 且无 /v1/v1 请求。(本环境无 pnpm,构建验证转 bot_qa)
2026-08-06 16:11:37 +08:00

87 lines
3.3 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# =============================================================================
# iAOP nginx 片段:将 /fba/ 前缀反代到 FBA 后端(127.0.0.1:8001)
#
# 用法:由运维将本文件 include 进现有 iAOP 站点的 server 块
# (与 8090 现有 location 并列),例如:
#
# server {
# listen 8090;
# ... 现有 iAOP 配置 ...
# include /opt/apps/iAOP/deploy/fba/nginx-fba.conf;
# }
#
# 路径映射:/fba/api/v1/auth/login → http://127.0.0.1:8001/api/v1/auth/login
# 说明:FBA 后端所有接口都在 /api/v1 之下,FBA UI 请求形如
# ${VITE_GLOB_API_URL}/api/v1/...,因此部署 FBA UI 时应将其
# VITE_GLOB_API_URL 配置为 https://<域名>/fba
# =============================================================================
location /fba/ {
# 去掉 /fba 前缀后转发
proxy_pass http://127.0.0.1:8001/;
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;
# FBA 登录/刷新 token 走 cookie + bearer,允许凭据
proxy_http_version 1.1;
proxy_set_header Connection "";
# 上传接口(sys/files)可能较大
client_max_body_size 50m;
proxy_read_timeout 60s;
}
# =============================================================================
# Phase 3:FBA UI 静态站点(用户/角色/菜单/日志管理界面)
#
# 部署:将 deploy/fba/artifacts/fba-ui-dist.tar.gz 解压到
# /opt/apps/iAOP/deploy/fba/fba-ui/(解压后应存在 fba-ui/dist/index.html)
# tar -xzf deploy/fba/artifacts/fba-ui-dist.tar.gz -C deploy/fba/fba-ui/
#
# 产物构建参数(已固化在包内):
# VITE_BASE=/fba-admin/
# VITE_GLOB_API_URL=http://39.101.182.167:8090/fba
# 入口:http://39.101.182.167:8090/fba-admin/
# =============================================================================
location /fba-admin/ {
alias /opt/apps/iAOP/deploy/fba/fba-ui/dist/;
index index.html;
# SPA 路由回退(hash 模式下 mostly 用不到,兜底)
try_files $uri $uri/ /fba-admin/index.html;
# 带 hash 的静态资源长缓存;index.html 不缓存
location ~* \.(js|css|png|jpg|jpeg|gif|svg|woff2?)$ {
expires 7d;
add_header Cache-Control "public";
}
location = /fba-admin/index.html {
add_header Cache-Control "no-cache";
}
}
# =============================================================================
# 推理通道(iAOP LLM 网关)
#
# issue #188:推理服务真实路径即 :30800/v1/*(/v1/models、/v1/chat/completions、
# /v1/health),故 nginx 反代 /v1/ 时 proxy_pass 带 / —— 不去前缀,直接透传,
# 消除前端「拼出 /v1/v1 靠 rewrite 巧合耦合」的隐式依赖。
# 前端 infer.ts BASE_URL 为空串,统一写 /v1/models、/v1/chat/completions、/v1/health。
# =============================================================================
location /v1/ {
proxy_pass http://127.0.0.1:30800/;
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;
client_max_body_size 20m;
proxy_read_timeout 120s;
}