Sub2API生产域名HTTPS接入与安全初始化
1. 目标、范围与 HTTPS 拓扑
本文记录实验网关承载 Authentik、Sub2API A 和 Sub2API B 的 HTTPS 验收流程。网关使用本机 20443 端口,通过 Host 将三个独立域名的请求分流到对应服务。本文仅整理本轮已执行的检查命令及返回结果,不补写尚未采集的 Nginx 上游配置。
三个 HTTPS 访问地址如下:
https://auth.lab.test:20443
https://sub2a.lab.test:20443
https://sub2b.lab.test:20443
2. 正式域名、端口和证书前置检查
开始前,先确认客户端通过正式 HTTPS 域名访问,而不是直接访问容器端口。网关监听 20443 端口,证书的 SAN 必须覆盖三个 Host;缺少任一域名,都可能导致浏览器提示证书名称不匹配
openssl x509 -in /opt/lab-gateway/certs/lab-server.crt -noout -subject -issuer -dates -ext subjectAltName
3. 网关 Compose 状态确认
进入网关目录,检查容器运行状态。本轮记录中,容器名为 lab-gateway,使用 Nginx 镜像,状态为 healthy,端口映射显示为 127.0.0.1:20443->20443/tcp。
cd /opt/lab-gateway
docker compose -f compose.yml ps

4. TLS 证书主题与 SAN 检查
本轮检查中,证书主题为 CN = auth.lab.test,签发者为 Codex Lab Root CA。SAN 同时包含 auth.lab.test、sub2a.lab.test 和 sub2b.lab.test,有效期为 2026 年 8 月 25 日至 2028 年 11 月 27 日。
分别查看证书基本信息与 SAN:
openssl x509 -in /opt/lab-gateway/certs/lab-server.crt -noout -subject -issuer -dates
openssl x509 -in /opt/lab-gateway/certs/lab-server.crt -noout -ext subjectAltName

5. Nginx 配置语法检查
确认证书内容后,再执行 Nginx 配置语法检查。语法检查通过,只说明配置可以被解析,不代表三个上游服务均能连通,后续仍需检查 Host 分流。
docker exec lab-gateway nginx -t
返回 syntax is ok 和 test is successful 后,再进入路由验收。

6. Sub2API A HTTPS 路由检查
Sub2API A 使用 sub2a.lab.test 作为 Host。下面的命令连接回环地址,并使用 -k 跳过证书信任和主机名校验,因此检查的是 HTTPS 监听、Host 分流及反向代理路径,不验证 DNS 解析或客户端证书信任。证书 SAN 与有效期需按第 4 节单独检查。
curl -ksS -H 'Host: sub2a.lab.test:20443' https://127.0.0.1:20443/health
返回 {"status":"ok"},说明请求已通过 A 的 HTTPS 路由到达应用健康接口。

7. Sub2API B HTTPS 路由检查
Sub2API B 使用独立的 sub2b.lab.test Host。即使 A 已检查成功,也需要单独检查 B,排查两个 Host 意外指向同一上游或端口的情况。
curl -ksS -H 'Host: sub2b.lab.test:20443' https://127.0.0.1:20443/health
在本轮三域名分流检查中,B 的 /health 返回 HTTP 200。
8. Authentik HTTPS 路由检查
Authentik 使用 auth.lab.test Host。这里检查 Ready 端点,避免将首页重定向误判为服务已经就绪。
curl -ksS -H 'Host: auth.lab.test:20443' -o /dev/null -w '%{http_code}\n' https://127.0.0.1:20443/-/health/ready/
返回 HTTP 200,说明网关可以将 Authentik 的就绪检查请求转发至相应服务。
9. 三域名分流与健康接口验收
将三个 Host 的检查结果放在一起核对,要求各端点状态码均为 200。命令使用 -o /dev/null 丢弃响应正文,并通过 -w 输出 HTTP 状态码,避免将页面内容误当作状态结果。
curl -ksS -H 'Host: auth.lab.test:20443' -o /dev/null -w '%{http_code}\n' https://127.0.0.1:20443/-/health/ready/
curl -ksS -H 'Host: sub2a.lab.test:20443' -o /dev/null -w '%{http_code}\n' https://127.0.0.1:20443/health
curl -ksS -H 'Host: sub2b.lab.test:20443' -o /dev/null -w '%{http_code}\n' https://127.0.0.1:20443/health
本轮返回结果为 200 / 200 / 200。
| 服务 | Host | 检查端点 | 本轮状态码 |
|---|---|---|---|
| Authentik | auth.lab.test | /-/health/ready/ | 200 |
| Sub2API A | sub2a.lab.test | /health | 200 |
| Sub2API B | sub2b.lab.test | /health | 200 |

10. 登录响应头与安全属性检查
健康接口通过后,再检查登录页响应头。本轮记录中,A 登录页返回 HTTP 200,响应中包含 CSP,以及以下安全响应头:
Referrer-Policy: strict-origin-when-cross-originX-Content-Type-Options: nosniffX-Frame-Options: DENY
curl -kIsS -H 'Host: sub2a.lab.test:20443' https://127.0.0.1:20443/login | head -n 15
CSP 内容较长,复核时还应结合页面访问情况,确认连接没有降级为 HTTP、页面不会被任意 iframe 嵌入,且浏览器不会对内容类型进行猜测。

11. 首次安全初始化与管理入口约束
HTTPS 验收通过后,再进行管理员初始化。管理员密码、证书私钥、Token 及其他密钥不应写入普通文档,管理操作应从已确认的 HTTPS Host 进入。
如果初始化页面无法打开,先检查网关状态、证书 SAN 和三域名分流,不要通过关闭 TLS 验证来掩盖路由问题。可先重新执行:
docker compose -f compose.yml ps
docker exec lab-gateway nginx -t
12. 故障排查与上线清单
出现证书错误时,先检查证书主题、SAN 和有效期。遇到 502 或空响应,先确认 lab-gateway 是否为 healthy、Nginx 语法检查是否通过,以及 Host 是否填写正确。
如果只有单个应用检查失败,先回查该域名对应的上游,不要同时修改三个路由。
上线前,逐项确认:
lab-gateway状态为healthy,监听 20443 端口。- 证书 SAN 覆盖三个实验 Host,本轮记录的证书有效期为 2026-08-25 至 2028-11-27。
nginx -t返回成功。- Authentik Ready、Sub2API A/B 健康端点均返回 HTTP 200。
- A 登录页保留 CSP、Referrer-Policy、nosniff 和 DENY 等安全响应头。
- 管理员密码、私钥和 Token 未写入 Markdown、截图或普通日志。
相关阅读:《Sub2API双实例部署与基础验收指南》