From 6173e0679ace9770efe4f2de584035fc1f672f26 Mon Sep 17 00:00:00 2001 From: xuans Date: Fri, 18 Sep 2026 00:11:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=87=E6=8D=A2=E7=AE=A1=E7=90=86=E5=9F=9F?= =?UTF-8?q?=E5=90=8D=E8=87=B3=E5=85=B1=E4=BA=AB80=E5=92=8C443=E5=85=A5?= =?UTF-8?q?=E5=8F=A3=E5=B9=B6=E6=9B=B4=E6=96=B0=E9=AA=8C=E6=94=B6=E8=AE=B0?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy/nginx/Scert.conf.example | 16 ++-------------- doc/Linux生产流程测试记录.md | 22 +++++++++++++++++++++- doc/管理入口反向代理部署.md | 21 +++++++++++---------- 3 files changed, 34 insertions(+), 25 deletions(-) diff --git a/deploy/nginx/Scert.conf.example b/deploy/nginx/Scert.conf.example index 875fc54..0e710b2 100644 --- a/deploy/nginx/Scert.conf.example +++ b/deploy/nginx/Scert.conf.example @@ -1,24 +1,12 @@ # 部署前替换管理域名、证书路径和端口占位符,不能直接加载本文件。 # 管理域名由部署环境决定,不在应用代码中固定。 -server { - listen __HTTP_PORT__ default_server; - listen [::]:__HTTP_PORT__ default_server; - server_name _; - return 404; -} +# 与其他站点共用监听端口,不重复声明 default_server。 server { listen __HTTP_PORT__; listen [::]:__HTTP_PORT__; server_name __MANAGEMENT_HOST__; - return 308 https://__MANAGEMENT_HOST__:__HTTPS_PORT__$request_uri; -} - -server { - listen __HTTPS_PORT__ ssl default_server; - listen [::]:__HTTPS_PORT__ ssl default_server; - server_name _; - ssl_reject_handshake on; + return 308 __MANAGEMENT_ORIGIN__$request_uri; } server { diff --git a/doc/Linux生产流程测试记录.md b/doc/Linux生产流程测试记录.md index 265d557..2f664e9 100644 --- a/doc/Linux生产流程测试记录.md +++ b/doc/Linux生产流程测试记录.md @@ -1,6 +1,26 @@ # Linux 生产流程测试记录 -## 当前结论:管理入口接续验收 +## 当前结论:标准域名入口 + +2026-09-18 00:01 起,按用户确认改为复用已开放的 80/443,通过 Nginx 域名站点转发。以下结果覆盖旧 8003/8004 方案的公网入口阻塞,不改变管理证书续期等尚未完成事项的结论。 + +- [✓] `http://web.apmmk.cn` 返回 308,跳转到 `https://web.apmmk.cn`,保留路径及查询参数。 +- [✓] `https://web.apmmk.cn` 转发到 `https://127.0.0.1:9004`,入口和上游均严格验证证书。 +- [✓] 应用 `server.proxy_https_port` 已改为 443;未改变上游监听端口、域名或数据库。 +- [✓] 独立 Linux 主机 `8.137.23.95` 通过正常公网 DNS 访问 `/readyz` 返回 200、`status=ready`,HTTP 跳转同样通过。未使用指定解析、隧道或跳过证书验证。 +- [✓] 新域名地址的桌面浏览器登录、刷新、退出及 401 检查通过。此项使用独立 SSH 隧道和严格 TLS,证据目录 `.runtime/apmmk-browser-20260918-standard/`,与上一项公网协议测试分开记录。 +- [✓] 原 8003/8004 已无监听;9004 仍仅回环监听。此前 UFW 放行规则暂保留,本轮没有删除规则或文件。 +- [✓] 共享 Nginx 主配置和 Smail 站点内容未变;Smail HTTPS 返回 200、TLS 验证结果为零。 + +备份位于 `/var/backups/scert-standard-20260918-0005-v2`,含受限配置备份及原站点。只修改 Scert 站点,不新增重复默认站点。首次切换时立即探测收到 SNI 拒绝,脚本自动恢复旧配置;随后加入平滑重载后的有界就绪等待,第二次切换成功。Scert 为加载对外端口配置经过重启,旧会话需重新登录;未重启同机 Smail、MySQL 或 Nginx 主进程。 + +完成时 Scert PID `579364`、重启计数零;Nginx 主进程 `578671`、Smail `574584`、MySQL `549584` 均与本轮开始一致。Nginx 配置语法检查通过,1440/1024 桌面测试无横向溢出、损坏图片或页面脚本错误。 + +Windows 本机直接访问仍出现 HTTPS 握手错误及 HTTP `Server: Beaver` 403,与独立 Linux 公网测试结果不同;该本地网络路径尚未定位,不宣称所有客户端网络均验证通过。本轮没有更改本机代理设置。 + +部署模板已改为共用端口的命名虚拟主机,外部完整地址使用 `__MANAGEMENT_ORIGIN__` 占位符,默认测试值不再包含 8004。管理证书自动续期与双层 TLS 更新、真实目标机推送及完整故障回退仍需后续完成,本次仅完成用户要求的标准入口调整。 + +## 历史结论:管理入口接续验收 以下为 2026-09-17 23:16 至 23:35 的接续结果,覆盖后文早期阶段关于域名未确认、初始化未完成和入口未部署的旧状态。不能将各阶段的通过项混为完整生产验收。 diff --git a/doc/管理入口反向代理部署.md b/doc/管理入口反向代理部署.md index 8e3ccb4..15bdf91 100644 --- a/doc/管理入口反向代理部署.md +++ b/doc/管理入口反向代理部署.md @@ -11,13 +11,14 @@ | 占位符 | 本次测试值 | | --- | --- | | `__MANAGEMENT_HOST__` | `web.apmmk.cn` | -| `__HTTP_PORT__` | `8003` | -| `__HTTPS_PORT__` | `8004` | +| `__MANAGEMENT_ORIGIN__` | `https://web.apmmk.cn` | +| `__HTTP_PORT__` | `80` | +| `__HTTPS_PORT__` | `443` | | `__UPSTREAM_PORT__` | `9004` | | `__FULLCHAIN_PATH__` | `/ssl-scert-acceptance/web.apmmk.cn/single/20260917-V1.0/fullchain.pem` | | `__PRIVATE_KEY_PATH__` | `/ssl-scert-acceptance/web.apmmk.cn/single/20260917-V1.0/key.pem` | -应用配置应保持 `server.https_mode=proxy`、回环监听 `127.0.0.1:9004`,并设置 `server.proxy_https_port=8004`。修改管理域名时,应同步调整应用域名、DNS、证书、Nginx 的 `server_name`、跳转地址和 `proxy_ssl_name`,不能只更改浏览器入口。 +应用配置应保持 `server.https_mode=proxy`、回环监听 `127.0.0.1:9004`,并设置 `server.proxy_https_port=443`。修改管理域名时,应同步调整应用域名、DNS、证书、Nginx 的 `server_name`、跳转地址和 `proxy_ssl_name`,不能只更改浏览器入口。使用非标准 HTTPS 端口时,`__MANAGEMENT_ORIGIN__` 必须包含该端口。 ## 部署流程 @@ -25,20 +26,20 @@ 2. 备份配置并核对权限。使用模板生成独立站点,逐项替换英文占位符;检查没有残留占位符。 3. 确认证书覆盖管理域名且未过期,私钥受限。上游必须通过公共 CA 与主机名校验,不允许关闭 `proxy_ssl_verify`。 4. 执行 `nginx -t`,成功后才执行 `systemctl reload nginx`。检查失败时保留失败文件用于审查,但从有效配置加载目录移出,不重载服务。 -5. 在主机防火墙及云安全组分别放行所需的 TCP 入口。本次为 `8003`、`8004`;管理后台应按实际使用范围限制来源。不要将上游 `9004` 对公网开放。 +5. 复用已开放的 TCP 80/443,由 Nginx 按域名分流,不需要另开 8003/8004。管理后台应按实际使用范围限制来源。不要将上游 `9004` 对公网开放。 6. 核对 `systemctl is-enabled Scert.service nginx.service`。启用开机自启不等于完成主机重启演练。 -`Host $http_host` 用于保留外部非标准端口。HTTP 跳转目标使用固定的配置域名,不使用客户端 Host 作为跳转目标;未知 HTTP 域名返回 404,未知 TLS SNI 拒绝握手。 +`Host $http_host` 用于保留客户端域名及显式端口。HTTP 跳转目标使用固定配置,不使用客户端 Host 作为跳转目标。共享 Nginx 的默认拒绝站点应统一配置;本模板不重复声明 `default_server`,避免与其他站点冲突。当前服务器已有未知 HTTP 域名返回 404、未知 TLS SNI 拒绝握手的默认站点。 ## 验收流程 服务器内先验证 Nginx 与上游,不跳过 TLS 校验: ```sh -curl --noproxy '*' --resolve web.apmmk.cn:8004:127.0.0.1 \ - --fail --show-error https://web.apmmk.cn:8004/readyz -curl --noproxy '*' --resolve web.apmmk.cn:8003:127.0.0.1 \ - --head 'http://web.apmmk.cn:8003/login?acceptance=1' +curl --noproxy '*' --resolve web.apmmk.cn:443:127.0.0.1 \ + --fail --show-error https://web.apmmk.cn/readyz +curl --noproxy '*' --resolve web.apmmk.cn:80:127.0.0.1 \ + --head 'http://web.apmmk.cn/login?acceptance=1' ``` 预期分别是就绪响应和 308 跳转,跳转保留路径及查询参数。随后必须从独立公网主机与真实浏览器验证,不使用 `--resolve`、SSH 隧道或跳过证书校验掩盖入口故障。 @@ -49,4 +50,4 @@ curl --noproxy '*' --resolve web.apmmk.cn:8003:127.0.0.1 \ ## 剩余门槛 -2026 年 9 月 17 日的具体结果见 `Linux生产流程测试记录.md`。本次 Nginx 站点内网验证成功,但独立 Linux 主机访问两个公网端口超时,尚需核对云安全组或上游网络。管理证书自动续期、更新后的双层 TLS 生效、故障回退以及真实目标机部署均需继续完成,不能将 `readyz=200` 作为完整验收结论。 +2026 年 9 月 18 日改为标准 80/443 后,独立 Linux 主机公网 HTTPS 就绪与 HTTP 跳转均已通过,旧 8003/8004 不再监听。具体结果见 `Linux生产流程测试记录.md`。管理证书自动续期、更新后的双层 TLS 生效、故障回退以及真实目标机部署仍需继续完成,不能将入口可达作为完整生产验收结论。