Authentik HTTPS发布与反向代理验证
本文以隔离测试环境中的 Authentik 2026.8.0 和 Nginx 网关为例,介绍 HTTPS 发布、证书检查、反向代理配置及外部访问验证流程,确保应用能够正确识别 Host 与 scheme,并正常返回认证流程页面。文中不展示密码、Token、TOTP 种子、Client Secret 及真实基础设施地址等敏感信息。
1. 实施目标与验收口径
本篇处理已运行 Authentik 的 HTTPS 发布,不涉及数据库初始化或身份源创建。验收分为容器健康、证书链和反向代理三层;全部通过后,外部 Base URL 才可交给 OIDC 等上游使用。
docker compose -f /opt/authentik-lab/compose.yml ps
docker compose -f /opt/lab-gateway/compose.yml ps

2. 环境版本与域名规划
本次环境使用 ghcr.io/goauthentik/server:2026.8.0,网关监听回环地址的 20443 端口。证书覆盖 auth.lab.test、sub2a.lab.test 和 sub2b.lab.test,网关按 Host 分流,各服务保持独立域名。
docker inspect authentik-lab-server-1 --format '{{.Config.Image}}'
ss -lntp | grep ':20443'
3. 上线前检查
先确认网关、Authentik server 和 worker 运行,再检查外部路径。服务未健康时不要修改 OIDC 回调地址,以免混淆启动、证书和代理问题。
curl -ksS --max-time 10 -H 'Host: auth.lab.test:20443' \
-o /dev/null -w 'status=%{http_code}\n' \
https://127.0.0.1:20443/-/health/ready/
4. 证书链与 SAN 检查
网关使用 lab-server.crt 和 lab-server.key。先由 CA 验证证书,再检查 SAN,不要只看 CN。当前证书由 Codex Lab Root CA 签发,验证结果为 OK,SAN 精确覆盖三个实验域名。
openssl verify \
-CAfile /opt/lab-gateway/certs/lab-ca.crt \
/opt/lab-gateway/certs/lab-server.crt
openssl x509 -in /opt/lab-gateway/certs/lab-server.crt \
-noout -subject -issuer -dates -ext subjectAltName

5. Nginx HTTPS 监听配置
虚拟主机 auth.lab.test 监听 20443,请求转发至 Authentik 9443 HTTPS 上游。证书只读挂载到网关,配置纳入变更审计。
server {
listen 20443 ssl;
server_name auth.lab.test;
ssl_certificate /etc/nginx/certs/lab-server.crt;
ssl_certificate_key /etc/nginx/certs/lab-server.key;
location / {
proxy_ssl_verify off;
proxy_pass https://authentik-lab-server-1:9443;
}
}
测试环境的上游证书由实验 CA 签发,因此现有配置关闭了 Nginx 到上游的证书校验。生产环境应把 CA 链正确挂载到网关,再开启上游校验,不能把 proxy_ssl_verify off 当作长期安全方案。

6. Authentik 外部 Base URL
server 与 worker 必须使用同一外部地址:https://auth.lab.test:20443。遗漏 worker 可能使后台任务生成 HTTP 链接或回调地址不一致。
docker inspect authentik-lab-server-1 authentik-lab-worker-1 \
--format '{{.Name}} {{range .Config.Env}}{{if eq . "AUTHENTIK_WEB__BASE_URL=https://auth.lab.test:20443"}}{{.}}{{end}}{{end}}'

7. 代理头与上游 TLS
代理传递原始 Host、外部端口和 HTTPS。网关使用 X-Forwarded-Proto https、X-Forwarded-Host、X-Forwarded-Port,并保留 WebSocket 所需的 HTTP/1.1 Upgrade 头。修改后先语法检查,再重载容器。
docker exec lab-gateway nginx -t
docker compose -f /opt/lab-gateway/compose.yml up -d
8. 认证流程访问验证
通过外部 Host 请求默认认证流程,应返回 HTML,而非 301 循环、502 或内部地址跳转;实测 HTTP 200,约 6 KB。
curl -ksS --max-time 20 \
-H 'Host: auth.lab.test:20443' \
-o /dev/null \
-w 'status=%{http_code} bytes=%{size_download}\n' \
'https://127.0.0.1:20443/if/flow/default-authentication-flow/'

9. 安全响应头验证
认证页面至少检查 X-Frame-Options、X-Content-Type-Options 和 Referrer Policy。当前响应包含 DENY、nosniff 和 same-origin。生产环境还应结合统一安全基线审查 HSTS、Cookie 属性和 CSP 是否由上层策略统一管理。
curl -kIsS --max-time 20 \
-H 'Host: auth.lab.test:20443' \
https://127.0.0.1:20443/if/flow/default-authentication-flow/ \
| grep -Ei 'HTTP/|content-type|x-frame|x-content|referrer|strict-transport|server'
10. Authentik 日志回归
Nginx 返回 200 不能证明代理头正确。查看 Authentik ASGI 日志,确认 Host 为 auth.lab.test:20443 且 scheme 为 https。如果日志仍显示 HTTP,优先检查 X-Forwarded-Proto、外部 Base URL 和代理信任配置。
docker compose -f /opt/authentik-lab/compose.yml logs --since 30m server 2>&1 \
| grep 'auth.lab.test:20443' \
| grep '"scheme": "https"' \
| tail -n 5

11. 常见故障排查
502 时先查网关是否加入 Authentik 网络、上游 9443 监听及容器 DNS;证书错误核对 SAN 与访问 Host;重定向循环核对 Base URL 与转发协议;回调为 HTTP 则确认 server、worker 配置一致。每次只改一个变量,再执行第 8 至第 10 节。
docker inspect lab-gateway --format '{{json .NetworkSettings.Networks}}'
docker exec lab-gateway getent hosts authentik-lab-server-1
docker compose -f /opt/authentik-lab/compose.yml logs --since 10m server worker
12. 上线检查清单
容器状态为 healthy,认证就绪接口返回 200。
- 证书由预期 CA 签发,SAN 与外部 Host 完全匹配。
- Nginx 仅发布需要的监听端口,证书和配置以只读方式挂载。
- server 与 worker 的 AUTHENTIK_WEB__BASE_URL 完全一致。
- 默认认证流程返回 200,无 HTTP/HTTPS 重定向循环。
- 安全响应头符合组织基线,日志中的 Host 与 scheme 正确。
- 生产环境完成上游 TLS 校验、DNS、证书续期和回滚演练。
- 本次验证证明 HTTPS 网关、外部地址和代理头协同工作。接入 OIDC 前,替换实验域名、证书和端口,重新完整验收;不得复用实验密钥或 CA。
相关阅读: