测试环境的自签证书被打进镜像,灰度发布时带到了生产,用户点继续访问还能用,蜘蛛直接放弃抓取,收录量当天开始下滑。

这类报错背后常见的原因有几处,逐个排除就行。自签证书不在信任链里,蜘蛛不会像用户那样手动放行;镜像里的证书路径覆盖了挂载的生产证书;健康检查只测端口通不通,没校验证书颁发者;回滚脚本只回代码不回证书文件。

先检查线上证书的颁发者

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,收录量在三天内止跌。

发布流水线里加一条证书颁发者校验,能挡住绝大多数误配,比事后查日志快得多。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189