一台服务器上放了两个站点,访问第二个域名时浏览器显示的是第一个站点的证书,提示不安全。

这类报错背后常见的原因有几处,逐个排除就行。默认站点抢先响应,没有按域名选择证书。还有一种是两个站点共用同一个监听配置,证书只有一个。

少数情况下是客户端不支持按名称选择,走了默认证书。

动手时先按域名测试返回的证书

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 直接访问时永远只能拿到默认证书,验证必须带域名参数,否则结论会完全相反。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189