开启 HSTS 后,蜘蛛访问 http 地址直接报连接错误,抓取统计里出现大量失败记录。
原因不止一个,得分开看。HSTS 强制浏览器和爬虫只走 https。少数情况下是http 地址没有配置可用的跳转。
还有一种情况,证书覆盖的域名与 HSTS 声明的范围不一致。
上来先确认 http 是否还能正常响应
curl -sI http://www.example.com/a/ | head -3
保证 https 全站可用后再开 HSTS
add_header Strict-Transport-Security 'max-age=31536000';
剩下的就是确认证书覆盖所有子域
openssl s_client -connect www.example.com:443 2>/dev/null | grep 'subject='
那几天正好在做别的变更,先把时间线对齐才敢动手。
排查用的命令都是临时敲的,没有写成脚本,事后才整理。
手上没有现成的复现脚本,就照着线上请求手工拼了一个。
改完先别撤,确认这几项。抓取错误消失,全站请求都走 https,跳转链也更短。
HSTS 不可回退,开启前一定确认所有子域都有有效证书,否则会把没有证书的站点直接锁死。max-age 建议先设成几百秒试运行,确认无误后再逐步加到一年,回滚时要等旧值过期。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。