答案是浏览器HSTS缓存导致无法访问HTTP。浏览器强制HTTPS且不发送HTTP请求,与Nginx运行状态无关;需通过chrome://net-internals/#hsts查询并删除策略,同时服务端将HSTS max-age设为0并重载配置。
这个问题本质不是 Nginx “卡住”或“无法退出”,而是浏览器记住了 HSTS 策略,后续所有 HTTP 请求被主动拦截、根本没发出去——所以你感觉“切不回 HTTP”,其实和 Nginx 当前是否运行、是否重启完全无关。
打开 Chrome 或 Edge,地址栏输入:
chrome://net-internals/#hsts
在下方 “Query domain” 输入你的测试域名(如 test.example.com),点击 Query。
若显示 Found,说明浏览器本地已强制启用 HTTPS;若为 Not found,问题不在 HSTS 缓存,需另查。
即使你改了配置,只要 Nginx(或 Ingress)仍在返回 Strict-Transport-Security 头,浏览器就会持续刷新缓存。验证方式:
curl -I https://test.example.com,查看响应头中是否含 Strict-Transport-Security
server { listen 443 ssl; ... } 块中是否有 add_header Strict-Transport-Security ...
nginx.ingress.kubernetes.io/hsts: "true")或 Ingress Controller 的全局 HSTS 开关仅停掉响应头还不够,必须同步清理客户端残留策略:
max-age 改为 0,例如:add_header Strict-Transport-Security "max-age=0; includeSubDomains" always;
然后重载 Nginx(nginx -s reload)或更新 Ingress 配置
chrome://net-internals/#hsts,在 “Delete domain security policies” 区域输入域名,点 Deletehttp://test.example.com,若能正常加载,说明已生效如果你曾将域名提交至 hstspreload.org 并成功加入浏览器预加载列表,那么即使清空本地缓存、关闭服务端头,浏览器仍会永久强制 HTTPS——这种状态无法通过常规手段“退出”,只能等待最新移除(流程长、门槛高)。上线前务必避免对测试域名启用 preload。