本地测试环境撤销HSTS需服务端停发+客户端清缓存双操作:先注释Nginx的HSTS头并重载,再通过chrome://net-internals/#hsts删除域名策略,最后用无痕窗口验证HTTP访问。

本地测试环境临时撤销 HSTS 配置的关键在于“服务端停发 + 客户端清缓存”双动作,缺一不可。浏览器一旦记住 HSTS 策略,就不会发出 HTTP 请求,Nginx 根本收不到请求,日志里也查不到跳转痕迹——所以单改 Nginx 配置是无效的。
确认当前 HSTS 是否已生效
在 Chrome 或 Edge 地址栏输入:
chrome://net-internals/#hsts
在下方 “Query domain” 输入你的测试域名(如 test.local 或 localhost.dev),点击 Query。
若显示 Found,说明浏览器已强制 HTTPS;若为 Not found,问题不在 HSTS,可跳过后续清理步骤。
停掉 Nginx 的 HSTS 响应头
编辑你的站点 HTTPS server 块(切勿在 HTTP server 块中配置):
找到类似这行配置并注释或删除:
# add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
或者临时设为禁用策略:
- add_header Strict-Transport-Security "max-age=0; includeSubDomains" always;
保存后执行:
sudo nginx -t && sudo systemctl reload nginx
手动清除浏览器 HSTS 缓存
回到 chrome://net-internals/#hsts 页面:
在 “Delete domain security policies” 区域输入你的测试域名,点击 Delete。
完成后,建议立即用无痕窗口访问 http://your-test-domain 验证是否能正常加载(不跳 HTTPS)。
预防下次测试出问题
本地开发时推荐初始配置就用短周期:
- 首次启用 HSTS 时,设 max-age=300(5 分钟),足够验证逻辑又不会锁死
- 避免加 preload 参数——它只对已上线、准备提交预加载列表的正式域名有意义
- 不用 includeSubDomains,除非你本地所有子域(如 api.test.local、admin.test.local)都已配好 HTTPS
不复杂但容易忽略


















