Scert/doc/管理入口反向代理部署.md

54 lines
3.9 KiB
Markdown
Raw Permalink 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.

# 管理入口反向代理部署
## 适用范围
管理域名由部署者指定,不固定为测试域名。独立站点模板位于 `deploy/nginx/Scert.conf.example`,适用于已完成初始化并取得正式管理证书的 Linux 服务。
当前模板不提供管理证书自动续期、证书路径切换或服务重载机制。完成这三项的实现和故障测试之前,不应据此宣布无人值守生产部署验收通过。
## 当前测试参数
| 占位符 | 本次测试值 |
| --- | --- |
| `__MANAGEMENT_HOST__` | `web.apmmk.cn` |
| `__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=443`。修改管理域名时,应同步调整应用域名、DNS、证书、Nginx 的 `server_name`、跳转地址和 `proxy_ssl_name`,不能只更改浏览器入口。使用非标准 HTTPS 端口时,`__MANAGEMENT_ORIGIN__` 必须包含该端口。
## 部署流程
1. 核对现有监听端口、Nginx 配置和同机服务。保留主配置及其他项目站点,不覆盖共享站点。
2. 备份配置并核对权限。使用模板生成独立站点,逐项替换英文占位符;检查没有残留占位符。
3. 确认证书覆盖管理域名且未过期,私钥受限。上游必须通过公共 CA 与主机名校验,不允许关闭 `proxy_ssl_verify`。
4. 执行 `nginx -t`,成功后才执行 `systemctl reload nginx`。检查失败时保留失败文件用于审查,但从有效配置加载目录移出,不重载服务。
5. 复用已开放的 TCP 80/443,由 Nginx 按域名分流,不需要另开 8003/8004。管理后台应按实际使用范围限制来源。不要将上游 `9004` 对公网开放。
6. 核对 `systemctl is-enabled Scert.service nginx.service`。启用开机自启不等于完成主机重启演练。
`Host $http_host` 用于保留客户端域名及显式端口。HTTP 跳转目标使用固定配置,不使用客户端 Host 作为跳转目标。共享 Nginx 的默认拒绝站点应统一配置;本模板不重复声明 `default_server`,避免与其他站点冲突。当前服务器已有未知 HTTP 域名返回 404、未知 TLS SNI 拒绝握手的默认站点。
## 验收流程
服务器内先验证 Nginx 与上游,不跳过 TLS 校验:
```sh
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 隧道或跳过证书校验掩盖入口故障。
桌面浏览器验收包括登录、刷新会话、退出后访问拒绝、静态资源和不同桌面宽度;协议验收包括 Cookie 安全属性、跨域写入拒绝和退出后的旧 Cookie 重放拒绝。使用新浏览器上下文,不复用其他项目缓存或会话。
若必须借助 SSH 隧道继续应用测试,应明确标记为隧道测试;即使浏览器全部通过,也不能等同公网部署通过。清理测试环境时只操作确认过的独立测试数据库,不清空共享服务器上的其他项目数据库。
## 剩余门槛
2026 年 9 月 18 日改为标准 80/443 后,独立 Linux 主机公网 HTTPS 就绪与 HTTP 跳转均已通过,旧 8003/8004 不再监听。具体结果见 `Linux生产流程测试记录.md`。管理证书自动续期、更新后的双层 TLS 生效、故障回退以及真实目标机部署仍需继续完成,不能将入口可达作为完整生产验收结论。