现场是这样的。测试站点加了严格传输头,后来要临时走 http 做兼容,结果浏览器直接拒绝访问,清缓存也不起作用,换一个浏览器才正常。

原因不止一个,得分开看。浏览器缓存了强制跳转策略且不清除;策略里带了子域,所有子站被一起强制;回退时没有先把最大生存时间降到零。

动手时先确认当前返回的策略头

curl -sI https://域名 | grep -i strict-transport

接着把最大生存时间改为零

add_header Strict-Transport-Security 'max-age=0' always;

然后重载并让客户端访问一次

systemctl reload nginx && curl -I https://域名

末了确认子域不再被强制

curl -sI https://子域名 | grep -i strict

中途换过一次思路,把范围缩到最小的那一层,反而快了。

别只看报错消失,验证要多做一步。访问一次后浏览器不再强制跳转,http 可以正常打开,子域也不再被牵连。

提醒一点。缓存存在浏览器里,服务端删掉头部并不会生效;必须先下发零时长让客户端自己清除,之后才能移除。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189