一台服务器上放了两个站点,访问第二个域名时浏览器显示的是第一个站点的证书,提示不安全。
这类报错背后常见的原因有几处,逐个排除就行。默认站点抢先响应,没有按域名选择证书。还有一种是两个站点共用同一个监听配置,证书只有一个。
少数情况下是客户端不支持按名称选择,走了默认证书。
动手时先按域名测试返回的证书
openssl s_client -connect 服务器IP:443 -servername 域名A </dev/null 2>/dev/null | openssl x509 -noout -subject
再往下确认各站点是否独立配置
grep -rn server_name /etc/nginx/conf.d/
接着把每个域名拆成独立站点
nginx -T | grep -E 'server_name|ssl_certificate '
末了重载后再验证两个域名
nginx -s reload
命令输出我都留了记录,免得改完记不清原来的值。
改之前先确认了最近有没有人动过配置,避免白查一遍。
恢复的判定其实很直接。两个域名各自返回匹配的证书,浏览器不再提示不安全。
用 IP 直接访问时永远只能拿到默认证书,验证必须带域名参数,否则结论会完全相反。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。