HSTS导致浏览器强制HTTPS而无法访问HTTP地址;可通过chrome://net-internals/#hsts查询/删除策略,curl验证响应头,Nginx注释add_header并重载,无痕窗口测试;若域名已预加载则需换子域调试。
这其实不是 Nginx 没配好,而是
浏览器
已经“记住”了你的 HSTS 策略,但当前访问没走 HTTPS,导致它压根不发请求——连 301 跳转都看不到,地址栏自然卡在 http://。
确认 HSTS 是否已在浏览器生效
直接在 Chrome 或 Edge 地址栏输入:
chrome://net-internals/#hsts
在下方 “Query domain” 输入你的测试域名(比如
test.example.com
),点 Query。
如果返回
Found
,说明浏览器已强制 HTTPS;若显示
Not found
,问题不在 HSTS,要另查其他跳转逻辑或证书配置。
检查 Nginx 是否还在发送 HSTS 响应头
即使你改了配置,旧的 HSTS 头可能仍被返回。用 curl 验证实际响应:
执行
查看输出中是否含
Strict-Transport-Security
字样
如果存在,检查 Nginx 的
或
块里是否有
;K8s Ingress 用户还要查注解或 Controller ConfigMap 中 hsts 是否启用
停掉 HSTS 并清空客户端缓存
只删配置不够,浏览器本地缓存会持续生效:
Comet AI 浏览器
下载 Comet AI 浏览器,体验由 Perplexity AI 驱动的革命性上网方式。内置 AI 助手可实时总结网页、跨标签页对比信息、自动执行任务。告别繁琐操作,让 AI 成为你的浏览副驾,大幅提升研究与工作效率。支持 Windows、macOS、Android 和 iOS。
下载
先注释或删除 Nginx 中的
行,然后
回到
chrome://net-internals/#hsts
,在 “Delete domain security policies” 输入相同域名,点 Delete
立即用无痕窗口打开测试链接——无痕模式不继承 HSTS 缓存,是最快验证方式
警惕预加载列表的长期影响
如果你的域名曾提交到
hstspreload.org
并被收录,即使清空所有本地设置,主流浏览器启动时仍会硬性强制 HTTPS。这种情况下:
无法通过客户端操作解除
只能等官方列表更新(周期数周至数月)
临时方案:换一个未预加载的测试子域(如
staging.test.example.com
)做调试
curl -I https://test.example.comserverhttpadd_header Strict-Transport-Security ...add_header Strict-Transport-Securitysudo nginx -t && sudo systemctl reload nginx