feat(deploy): 首装脚本补 TLS 自检(跳转端口 302 / HTTP2 协商 / 证书可读)

TLS 是有证书用户的主路径,之前只在生产手工验过、脚本没覆盖。补上后
NAVI_TLS=1 的首装会自己验证:http 跳转端口是否 302 到 https、入口能否
协商 HTTP/2(对应曾踩过的 listen … ssl http2 写法)、证书是否能读出主题。
This commit is contained in:
HomeDash Bot
2026-09-12 09:45:13 +08:00
parent 965c9cb41a
commit fe5ddf274b

View File

@ -175,6 +175,16 @@ check "未知域名 → 自定义 404" 404 "$(code_of -k --resolve nobody.invali
if [ -n "$DOMAIN" ]; then
check "门户 $DOMAIN" 200 "$(code_of -k --resolve "${DOMAIN}:${ENTRY_PORT}:127.0.0.1" "${SCHEME}://${DOMAIN}:${ENTRY_PORT}/")"
fi
if [ "$TLS" = "1" ]; then
# TLS 路径自检:跳转端口必须 302 到 https,且入口要能协商 HTTP/2
# (曾踩过:nginx 1.22 不认独立的 http2 on;,必须写成 listen … ssl http2;)
check "http→https 跳转" 302 "$(code_of --resolve "nobody.invalid:${REDIRECT_PORT}:127.0.0.1" "http://nobody.invalid:${REDIRECT_PORT}/")"
HV="$(curl -sk -o /dev/null -w '%{http_version}' -m 8 "${SCHEME}://127.0.0.1:${ENTRY_PORT}/" 2>/dev/null || echo '?')"
if [ "$HV" = "2" ] || [ "$HV" = "2.0" ]; then echo " ✓ HTTP/2 协商 → $HV"; else echo " ! HTTP 版本为 $HV(HTTP/2 与客户端支持有关,仅提示)"; fi
CERT_SUBJ="$(echo | openssl s_client -connect 127.0.0.1:${ENTRY_PORT} -servername "${DOMAIN:-localhost}" 2>/dev/null | openssl x509 -noout -subject 2>/dev/null || true)"
echo " 证书: ${CERT_SUBJ:-未能读取(仅提示)}"
fi
echo " 容器状态:$(docker inspect navi --format '{{.State.Status}} {{if .State.Health}}{{.State.Health.Status}}{{end}}')"
[ "$fail" = 0 ] || die "自检未全绿,请按上面 ✗ 项排查(容器保留未删除,便于查看日志)"