问题极大概率出在浏览器本地强制执行的hsts策略上;需用chrome://net-internals/#hsts查询确认,再以max-age=300覆盖旧策略应急,5分钟后恢复并加固证书与preload校验。

当 HSTS 配置错误(如 max-age 过长、includeSubDomains 误开、或证书不匹配)导致用户访问直接报“您的连接不是私密连接”甚至空白页,且你已确认新证书有效、Nginx 配置无语法错误、服务正常运行——那问题极大概率出在浏览器本地强制执行的 HSTS 策略上。这不是 Nginx 没响应,而是浏览器压根没发请求,或发了 HTTPS 请求后因证书异常立即终止。
确认是否真是 HSTS 导致的问题
先排除其他常见原因:用 curl -I https://yourdomain.com 测试,如果返回 200 或 301 且含 Strict-Transport-Security 头,说明 Nginx 本身能响应;再换一台**从未访问过该站的设备或隐身窗口**访问,若能打开,则基本锁定是旧 HSTS 策略在生效。
最准验证方式:
– 打开 Chrome,访问 chrome://net-internals/#hsts
– 在 “Query domain” 输入你的主域名(如 example.com),点击 Query
– 查看返回的 expiry 时间:如果远在几个月甚至几年后,就证实 HSTS 缓存仍在强力生效
安全临时覆盖 HSTS 策略(5 分钟级应急)
目标不是禁用 HSTS,而是用更短有效期覆盖旧策略,让浏览器在几分钟后自动“松绑”。操作必须精准:
- 只修改启用 HTTPS 的
server块(即listen 443 ssl那一块),切勿写在 HTTP 块或未启用 SSL 的配置中 - 将原 HSTS 头替换为:
add_header Strict-Transport-Security "max-age=300; includeSubDomains" always;
(注意:去掉preload;max-age=300即 5 分钟;always确保重定向响应也携带) - 执行
nginx -t校验语法,通过后运行nginx -s reload - 等待 5–10 分钟,让多数用户浏览器收到新响应头并更新本地策略
用户端快速缓解(辅助手段)
对已受影响的用户,可引导其手动清除 HSTS 缓存(仅限紧急支持场景):
- Chrome / Edge:访问
chrome://net-internals/#hsts→ 输入域名 → 点击 “Delete domain security policies” - Firefox:地址栏输入
about:config→ 搜索security.cert_pinning.enforcement_level→ 临时设为0(不推荐长期使用) - 注意:此操作需用户配合,不能替代服务端策略覆盖
恢复后务必检查与加固
5 分钟策略生效后,用户访问应逐步恢复正常。此时要立刻做两件事:
- 检查当前证书是否完整覆盖所有子域(尤其开启
includeSubDomains时),缺失任一子域证书都会引发连锁拦截 - 将 HSTS 头恢复为稳健值,例如:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
但上线前必须确保:所有子域均已部署有效 HTTPS 且可通过 hstspreload.org 提交校验











