报错是这么冒出来的。Nginx 只保留 TLS 1.3 并关掉 1.2 兼容,百度蜘蛛的连接直接失败,日志里 SSL_do_handshake 报错每天上千条,百度收录一周掉了三成。
把日志和配置对完,能解释这个现象的基本就这几处。蜘蛛客户端只支持到 TLS 1.2,协商阶段就失败。也可能是ssl_protocols 只写了 TLSv1.3,没有留回退版本。
少数情况下是CDN 节点与源站之间的协议版本不一致。
测试只协商 1.3 是否通
openssl s_client -connect www.example.com:443 -tls1_3 </dev/null | head -5
测试 1.2 的握手结果
openssl s_client -connect www.example.com:443 -tls1_2 </dev/null | head -5
等前面都确认过,再把两个版本都放开
grep -n 'ssl_protocols' /etc/nginx/nginx.conf
这类问题以前遇到过,但这次的触发条件和上次不一样。
这类改动我都写进变更记录,过两周再出问题时能对上号。
怎么算真的好了,看的是同一批现象。放开 1.2 后握手错误归零,百度抓取量在两周内回到原来的水平。
提醒一点。关旧协议要看真实客户端分布,日志里的握手失败数比安全评分更能说明问题。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
