From 6e5c03ecccd3941b014988b6c858a89084047ce1 Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期一, 28 九月 2026 10:52:38 +0800
Subject: [PATCH] docs(server): 记录域名接入与 origin 随域名变化重演
---
docs/huifu/08-上线与环境.md | 6 ++++++
.scratch/server-testenv/README.md | 6 +++++-
2 files changed, 11 insertions(+), 1 deletions(-)
diff --git a/.scratch/server-testenv/README.md b/.scratch/server-testenv/README.md
index a2caa6d..d996efe 100644
--- a/.scratch/server-testenv/README.md
+++ b/.scratch/server-testenv/README.md
@@ -34,7 +34,7 @@
| `SERVER_ADDRESS` | 后端只绑 `127.0.0.1`,对外一律经 nginx。 |
| `UPLOAD_DIR` | 上传目录指到 `/data`(系统盘只有 40G)。 |
| `APP_PRIVACY_ENCRYPTION_KEY` | 默认值是**仓库里公开的开发 key**。`SensitiveDataCrypto` 是 `SHA-256(该字符串)` 派生 AES key,所以任意字符串合法。**必须在写入任何隐私数据之前设**——事后换会让旧数据解不开。 |
-| `CORS_ALLOWED_ORIGINS` | **必须包含浏览器实际访问的 origin,哪怕是同源。** 浏览器对同源的非简单请求(POST + JSON)也会带 `Origin` 头,而 `ApiCorsConfig` 只要看到 `Origin` 就按白名单校验,不在名单里直接 **403 `Invalid CORS request`**。漏了它的症状就是「登录 403」。 |
+| `CORS_ALLOWED_ORIGINS` | **必须包含浏览器实际访问的 origin,哪怕是同源。** 浏览器对同源的非简单请求(POST + JSON)也会带 `Origin` 头,而 `ApiCorsConfig` 只要看到 `Origin` 就按白名单校验,不在名单里直接 **403 `Invalid CORS request`**。漏了它的症状就是「登录 403」。当前值:`http://117.172.73.106:8081`、`http://117.172.73.106:8082`、`http://www.dqrcfwpt.com:8081`、`https://www.dqrcfwpt.com`(后者为将来上 TLS 预留)。**换域名 / 换端口 / 换协议都会换 origin,都要补** —— 2026-09-22 因为换域名又踩了一次。 |
`allowed-origin-patterns`(`http://localhost:[*]`)没被覆盖,所以本地 vite / HBuilderX 调试来源照旧放行。
@@ -61,6 +61,10 @@
`.scratch/pending-order-payment-flow/README.md` 的 F1)。收敛靠读接口惰性查询 + 60 秒一轮的对账快车道,
订单不会卡住。要收回调得等备案域名。
- **8081 对全公网开放且是纯 HTTP**(无 TLS),token 明文传输。已确认接受(测试环境)。
+- **域名**:`www.dqrcfwpt.com` → `117.172.73.106`(2026-09-22 解析)。**访问必须带端口**:
+ `http://www.dqrcfwpt.com:8081` —— 80/443 未备案开不出来,实测不带端口是超时。退域名 `dqrcfwpt.com`
+ **没有 A 记录**(公网解析器确认 `ENODATA`),要用不带 www 的形式得先补记录。
+- nginx 的 `server_name _` 是通配,所以域名访问无需改站点配置(实测 `http://www.dqrcfwpt.com:8081/` 返回 200)。
- 数据库:`talent_card`,字符集 `utf8mb4` / `utf8mb4_0900_ai_ci`(与测试库同口径,
照 `ResetTestDatabase.java` 只写 charset 不写 collate;**不要**照抄 `init-local-mysql.sql` 的 `utf8mb4_unicode_ci`,那是 5.7 开发库用的)。
- MySQL 8.4 上迁移里的 7 条 `VALUES() is deprecated`(1287)仍可运行,但该语法未来版本会被移除。
diff --git "a/docs/huifu/08-\344\270\212\347\272\277\344\270\216\347\216\257\345\242\203.md" "b/docs/huifu/08-\344\270\212\347\272\277\344\270\216\347\216\257\345\242\203.md"
index be865a7..01acd1b 100644
--- "a/docs/huifu/08-\344\270\212\347\272\277\344\270\216\347\216\257\345\242\203.md"
+++ "b/docs/huifu/08-\344\270\212\347\272\277\344\270\216\347\216\257\345\242\203.md"
@@ -335,6 +335,12 @@
它覆盖本机随机端口的调试来源、**与精确白名单是两个键**,覆盖 `CORS_ALLOWED_ORIGINS` 不会动它——
所以本地 vite / HBuilderX 调试不受影响。**上线时把真实域名加进 `CORS_ALLOWED_ORIGINS` 即可。**
+**这条坑会跟着域名的每一次变化重演。** origin 由「协议 + 主机 + 端口」三者共同决定,**任何一个变了
+都是一个新 origin,都要单独加**。2026-09-22 一天里演了两次:先用 IP 访问(`http://117.172.73.106:8081`)
+踩了一次;把域名 `www.dqrcfwpt.com` 解析好、**改用域名访问又踩了一次**(登录再次 403,表现与第一次
+一模一样)。所以:**换域名、换端口、上 HTTPS 都要同步改这个变量**;`http://host:8081` 与 `https://host`
+是两个不同 origin,端口不同也是两个。
+
**4. 凭据要逐条过一遍「弱口令」口径。** 政务云的安全扫描不是形式主义——2026-09-22 它**真的登进来了一次**
(抓到请求体 `{"account":"admin","password":"123456"}`,响应 200 带 `accessToken`)。部署时以下三件事一起做:
--
Gitblit v1.7.1