这类问题我又碰上了一次。主站用 *.example.com 的通配符证书,新增图片域名 img.static.example.com 属于二级子域,通配符只覆盖一层。浏览器打开图片地址报证书错误,蜘蛛抓图全部失败,图片收录一天清零。

第一反应是「图片地址被硬编码成新域名,没做回退」,验证下来不成立。

真正麻烦的地方在于,几个原因的现象几乎一样。通配符只匹配一层,a.b.example.com 不在范围内;证书 SAN 里没有补这个域名;CDN 回源用错 SNI,返回默认站点的证书。

上来先看图片域名的证书覆盖了哪些名字

openssl s_client -connect img.static.example.com:443 -servername img.static.example.com < /dev/null | openssl x509 -noout -text | grep -A1 'Subject Alternative Name'

随后确认图片请求返回什么

curl -sI https://img.static.example.com/a.jpg

给证书补 SAN 或单独签发一张

curl -sI https://img.static.example.com/a.jpg | head -1

剩下的就是把图片地址临时回退到主域

curl -s https://www.example.com/p/1 | grep -o 'https://img[^" ]*' | head -3

怎么算真的好了,看的是同一批现象。图片域名握手正常且返回 200,图片搜索收录在两周内恢复到原来的量级。

通配符证书省事但只管一层,规划域名层级时要把这一点算进去。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189