安全扫描要求关掉 TLS 1.0 和 1.1,改完配置后错误日志里出现一批 handshake failure,UA 是几个老版本抓取器。页面本身没问题,但这些抓取器再也连不上,收录开始零星掉。

一开始怀疑是「证书算法用了老爬虫不支持的签名」,查了一圈,方向不对。

排查方向其实有限,先把可能性排一排。部分老抓取器只支持 TLS 1.0。也可能是关闭低版本的同时没保留 TLS 1.2 的兼容套件。

另外,CDN 边缘仍支持低版本,回源却不支持,两边不一致。

动手时先列出当前支持的协议版本

openssl s_client -connect www.example.com:443 -tls1 < /dev/null | head -5

然后确认 TLS 1.2 是否正常

openssl s_client -connect www.example.com:443 -tls1_2 < /dev/null | grep Protocol

只关 1.0 保留 1.1 过渡一段时间

ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;

剩下的就是统计握手失败次数

grep -c 'handshake failure' /var/log/nginx/error.log

排查用的命令都是临时敲的,没有写成脚本,事后才整理。

改完先别撤,确认这几项。握手失败日志归零,老抓取器的请求重新出现,收录曲线止跌。

容易忽略的是,关旧协议是趋势,但要分批做,先看日志里还有哪些 UA 在用低版本。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。

作者 9823189