问题
客户在一台电脑本地启动 PC 前端,例如 http://192.168.0.78:5800,后端网关部署在另一台电脑,例如 http://192.168.0.202:49090。
客户已经把 .env.development 中的 VITE_BASE_URL 改成网关地址,但登录页仍然请求:
text
http://192.168.0.78:5800/admin-api/system/tenant/get-by-website?website=192.168.0.78浏览器 Network 显示 502 Bad Gateway。
答案
这是本地 Vite 开发代理没有转发到真实网关导致的。仅修改 .env.development 不一定生效,因为 apps/web-antd/vite.config.ts 里的 server.proxy['/admin-api'].target 可能仍写死为本机后端地址。
详细说明
本地开发时,浏览器请求显示为:
text
http://前端电脑IP:5800/admin-api/...这是正常现象,说明请求先进入本机 Vite dev server。真正访问哪个后端,取决于 Vite 代理配置。
如果 vite.config.ts 中仍是类似配置:
ts
proxy: {
'/admin-api': {
changeOrigin: true,
rewrite: (path: string) => path.replace(/^\/admin-api/, ''),
target: 'http://localhost:48080/admin-api',
ws: true,
},
},则客户即使把 .env.development 改成:
env
VITE_BASE_URL=http://192.168.0.202:49090
VITE_GLOB_API_URL=/admin-api请求仍会被 Vite 转发到前端电脑自己的 localhost:48080,而不是远程网关 192.168.0.202:49090。如果前端电脑没有启动后端,或端口不通,就会由 Vite 返回 502 Bad Gateway。
涉及代码 / 配置
修复方式一:直接把代理目标改成客户网关地址。
ts
proxy: {
'/admin-api': {
changeOrigin: true,
rewrite: (path: string) => path.replace(/^\/admin-api/, ''),
target: 'http://192.168.0.202:49090/admin-api',
ws: true,
},
},修复方式二:让代理目标读取环境变量,避免客户以后只改一个地方时漏改。
ts
proxy: {
'/admin-api': {
changeOrigin: true,
rewrite: (path: string) => path.replace(/^\/admin-api/, ''),
target: `${process.env.VITE_BASE_URL}/admin-api`,
ws: true,
},
},对应 .env.development:
env
VITE_BASE_URL=http://192.168.0.202:49090
VITE_GLOB_API_URL=/admin-api修改后必须重启前端开发服务,只刷新浏览器不会重新加载 Vite 配置。
powershell
pnpm dev:antd验证方法
- 在前端电脑浏览器访问
http://192.168.0.202:49090/doc.html,确认远程网关可访问。 - 重启
pnpm dev:antd。 - 打开登录页,Network 中仍可能看到请求 URL 是
http://192.168.0.78:5800/admin-api/...,这是正常的本地代理入口。 - 如果不再出现
502 Bad Gateway,说明 Vite 已能转发到远程网关。 - 如果接口返回
401 账号未登录,说明已经打到后端鉴权逻辑,此时应继续检查接口匿名放行或登录态,而不是代理连通性。
修订记录
| 日期 | 修改 |
|---|---|
| 2026-07-08 | 初稿 |
