与
dist/DEPLOY-nginx-proxy.md同源说明,便于仓库内查阅。
打生产包时请同步更新dist/内副本(或重新npm run build后覆盖写入)。
前端请求均为同源路径,协议由 nginx 决定(http/https)。
下列「参考上游」为开发/测试机地址,政务网部署请改成内网实际地址与端口。
| 前端前缀 | 改写 | 参考上游(外网测试) | 用途 |
|---|---|---|---|
/chat-api/ |
剥掉 /chat-api |
http://192.168.2.23:8000 |
对话 SSE、企业分类 |
/dms/ |
直通(不改路径) | http://121.43.55.7:10081 |
DMS 数据 / 文件 / 政策库静态文件 |
/oauth/ |
直通 | http://121.43.55.7:10086 |
未登录访客换 DMS token |
/api/ |
剥掉 /api |
http://121.43.55.7:10011 |
取本机 IP、NLS 语音 token |
说明:
token(不是 Authorization)。前端会自己带;nginx 不要覆盖已有 token 头(可选:请求未带时再注入兜底 token)。/chat-api/ → 聊天后端(剥前缀后)| 方法 | 浏览器请求 | 上游真实路径 |
|---|---|---|
POST(SSE) |
/chat-api/api/chat |
/api/chat |
POST |
/chat-api/api/company/classify |
/api/company/classify |
对应 env:VITE_CHAT_API="/chat-api"
/dms/ → DMS(直通)| 方法 | 浏览器请求 | 上游真实路径 |
|---|---|---|
POST |
/dms/content/selectContentList |
/dms/content/selectContentList |
POST |
/dms/content/addContent |
/dms/content/addContent |
POST |
/dms/content/updateContent |
/dms/content/updateContent |
POST |
/dms/content/updateAudit |
/dms/content/updateAudit(删除=改状态) |
POST |
/dms/file/uploadFile |
/dms/file/uploadFile |
GET |
/dms/static/file/…(或 photo) |
同路径(政策库 json、附件预览) |
对应 env:VITE_DMS_API="/dms"
政策库远端相对路径见部署包内 config.js 的 dms.policyRemotePath。
/oauth/ → 登录服务(直通)| 方法 | 浏览器请求 | 上游真实路径 |
|---|---|---|
POST |
/oauth/api/user/login |
/oauth/api/user/login |
对应 env:VITE_OAUTH_LOGIN_URL="/oauth"(代码再拼 /api/user/login)
/api/ → 后端网关(剥前缀后)| 方法 | 浏览器请求 | 上游真实路径 |
|---|---|---|
GET |
/api/proxy/verify/getIPByBrowser |
/proxy/verify/getIPByBrowser(纯文本 IP) |
GET |
/api/proxy/verify/getALYToken |
/proxy/verify/getALYToken(NLS token) |
对应 env:VITE_GATEWAY_API="/api"
| 目标 | 说明 |
|---|---|
VITE_API(当前 //qingpu-data-api.metamaker.cn) |
企业登录 / 企业信息,绝对地址,不经上述四条代理。内网若换网关需改 .env.production 后重新构建。 |
wss://nls-gateway-cn-shanghai.aliyuncs.com/ws/v1 |
阿里云实时语音;页面非安全上下文时麦克风入口已隐藏。 |
https://zwdtuser.sh.gov.cn/… |
一网通办企业登录(浏览器整页跳转);回跳白名单需另行对接。 |
| 一网通办政策详情等外链 | target=_blank 打开,非 XHR。 |
# 静态前端(dist 目录)
root /path/to/dist;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
# 对话后端 —— 剥 /chat-api
location /chat-api/ {
proxy_pass http://<对话机>:<端口>/; # 注意末尾 /,等价剥前缀
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Connection "";
proxy_buffering off; # SSE 建议关闭缓冲
proxy_read_timeout 3600s;
}
# DMS —— 直通(保留 /dms 前缀)
location /dms/ {
proxy_pass http://<DMS机>:<端口>; # 无末尾 /,把完整 URI 转给上游
proxy_set_header Host $host;
# 可选:仅当客户端未带 token 时注入兜底(勿覆盖前端已带的 token)
}
# OAuth —— 直通
location /oauth/ {
proxy_pass http://<OAuth机>:<端口>;
proxy_set_header Host $host;
}
# 网关 —— 剥 /api
location /api/ {
proxy_pass http://<网关机>:<端口>/; # 末尾 / 剥掉 /api
proxy_set_header Host $host;
}
# 网关
curl -sS "http://<站点>/api/proxy/verify/getIPByBrowser"
curl -sS "http://<站点>/api/proxy/verify/getALYToken"
# OAuth(应能打到业务层;假账号可能返回业务错误而非 502)
curl -sS -X POST "http://<站点>/oauth/api/user/login" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "userName=x&password=x&clientId=0"
# DMS(需有效 token 头才有数据)
curl -sS -X POST "http://<站点>/dms/content/selectContentList" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "token: <JWT>" \
-d "columnId=<栏目id>&page=0&pageSize=1"
# 聊天(SSE,需按实际协议带 body)
curl -sS -N -X POST "http://<站点>/chat-api/api/chat" \
-H "Content-Type: application/json" \
-d '{"thread_id":"ping","question":"ping"}'
| 文件 | 作用 |
|---|---|
本包 config.js |
DMS 栏目/模型 id、双 c_ 开关、政策库 policyRemotePath(部署后可改,无需重建) |
构建期 .env.production |
VITE_* 同源前缀与 VITE_API(改完需重新 npm run build) |
当前 config.js 默认按政务网栏目配置;切互联网见文件内注释。