测试环境的自签证书被打进镜像,灰度发布时带到了生产,用户点继续访问还能用,蜘蛛直接放弃抓取,收录量当天开始下滑。
这类报错背后常见的原因有几处,逐个排除就行。自签证书不在信任链里,蜘蛛不会像用户那样手动放行;镜像里的证书路径覆盖了挂载的生产证书;健康检查只测端口通不通,没校验证书颁发者;回滚脚本只回代码不回证书文件。
先检查线上证书的颁发者
echo | openssl s_client -connect www.example.com:443 2>/dev/null | openssl x509 -noout -issuer -subject
接着确认证书文件来自哪里
ls -l /etc/nginx/ssl/ && md5sum /etc/nginx/ssl/*.pem
随后换回正式证书并重载
nginx -t && nginx -s reload
等前面都确认过,再把证书校验加进发布检查
curl -sI https://www.example.com/ --cacert /etc/ssl/certs/ca-certificates.crt
这类改动我都写进变更记录,过两周再出问题时能对上号。
改完先别撤,确认这几项。证书颁发者回到公共 CA,蜘蛛抓取恢复 200,收录量在三天内止跌。
发布流水线里加一条证书颁发者校验,能挡住绝大多数误配,比事后查日志快得多。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
