给子站绑定 shop.example.com,访问时浏览器报 NET::ERR_CERT_COMMON_NAME_INVALID,主站和 news 子站都正常。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,服务器只部署了 example.com 的单域名证书,SNI 列表里没有 shop.example.com。子站域名解析到同一 IP,443 握手时返回的还是主站证书。

「子站证书不匹配」这类改动最怕改一半,回滚脚本先准备好,再动生产。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。

server {
    server_name shop.example.com;
    ssl_certificate /etc/ssl/shop.crt;
    ssl_certificate_key /etc/ssl/shop.key;
}

权限不要一口气开到最大,先加到够用再往上试,范围小才好收。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。

具体做法是,给子站域名单独签证书或改用泛域名证书;在 Nginx 对应 server 块配置 ssl_certificate;确认 443 走 SNI 且证书链完整。

最后用这个标准收尾,子站 https 打开无证书警告,证书详情里的域名是 shop.example.com。

作者 9823189