记录一下那天晚上的排查过程。证书的 OCSP 地址在国外,国内访问经常超时,日志里蜘蛛的 TLS 握手平均 6 秒,抓取频次一个月掉了四成,用户首屏也明显变慢。

把日志和配置对完,能解释这个现象的基本就这几处。证书未开启 OCSP stapling,每次握手都要实时查询。也可能是OCSP 响应地址解析慢或被网络阻断。

不容易想到的是,Nginx 没配 ssl_stapling_verify 和缓存。

测一次握手的耗时

curl -s -o /dev/null -w '%{time_appconnect}\n' https://www.example.com/

接着确认 stapling 是否生效

openssl s_client -connect www.example.com:443 -status </dev/null | grep -i 'OCSP Response'

等前面都确认过,再检查 Nginx 的相关配置

grep -n 'ssl_stapling' /etc/nginx/nginx.conf

同事提醒我看一下最近一次发布,时间点确实对得上。

命令输出我都留了记录,免得改完记不清原来的值。

改之前先确认了最近有没有人动过配置,避免白查一遍。

别只看报错消失,验证要多做一步。开启 stapling 后握手时间降到 200 毫秒以内,蜘蛛抓取频次两周内恢复。

提醒一点。OCSP stapling 需要完整的证书链文件,只配叶子证书会直接失效。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189