feat(deploy): 首装脚本补 TLS 自检(跳转端口 302 / HTTP2 协商 / 证书可读)
TLS 是有证书用户的主路径,之前只在生产手工验过、脚本没覆盖。补上后 NAVI_TLS=1 的首装会自己验证:http 跳转端口是否 302 到 https、入口能否 协商 HTTP/2(对应曾踩过的 listen … ssl http2 写法)、证书是否能读出主题。
This commit is contained in:
@ -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 "自检未全绿,请按上面 ✗ 项排查(容器保留未删除,便于查看日志)"
|
||||
|
||||
Reference in New Issue
Block a user