开启 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 建议先设成几百秒试运行,确认无误后再逐步加到一年,回滚时要等旧值过期。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189