先看现象。用浏览器访问 https 一切正常,蜘蛛抓取却报证书错误,抓取量持续下降,用户完全感知不到。
真正麻烦的地方在于,几个原因的现象几乎一样。部署时只装了站点证书,没有装中间证书。另一种情况是不同浏览器会自动补链,蜘蛛不会。
不容易想到的是,CDN 和源站的证书配置不一致。
先检查证书链是否完整
openssl s_client -connect www.example.com:443 -showcerts | grep 's:'
随后把中间证书拼进 fullchain 文件
cat domain.crt intermediate.crt > fullchain.pem
剩下的就是重新加载配置并验证
nginx -t && nginx -s reload
这次没动代码,只在配置和运行环境上找原因。
隔了一天再看,现象没变,说明不是偶发。
改完先别撤,确认这几项。证书链验证通过,蜘蛛抓取错误消失,抓取量在一天内恢复。
浏览器的容错能力掩盖了问题,部署后一定要用命令行验证,而不是打开页面看一眼就认为没问题。证书到期前一个月也要用同样的命令复查一次。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。