ServerName必须与SSL证书的Subject或SAN域名完全一致,否则触发浏览器证书不匹配警告;需在<VirtualHost *:443>中单独配置ServerName(不含协议和端口)、ServerAlias(补充域名但须在SAN中)、SSLCertificateFile等指令,并通过configtest和openssl验证。

ServerName 必须和 SSL 证书绑定的域名完全一致,否则浏览器会提示“证书不匹配”或“不安全”,HTTPS 连接可能被拦截或拒绝。这不是可选建议,而是证书验证机制的硬性要求。
ServerName 与证书域名必须严格对应
证书(尤其是 DV 类)只对明确列出的域名生效。比如证书是为 www.example.com 签发的,那么:
-
ServerName www.example.com✅ 正确 -
ServerName example.com❌ 若证书未包含该 SAN,将失败 -
ServerName test.example.com❌ 子域名未在证书中声明,不被信任
多域名证书(SAN)可同时支持多个域名,例如证书含 example.com 和 www.example.com,则两个 ServerName 均可使用,但每个虚拟主机仍需单独配置并指向对应证书。
实际配置中怎么写
在 <VirtualHost *:443> 块内,ServerName 应写成不含端口的完整主域名,且与证书 Subject 或 SAN 字段完全一致(大小写不敏感,但拼写、点号、前缀必须一致):
- 正确写法:
ServerName admin.nineopen.com - 错误写法:
ServerName https://admin.nineopen.com(协议不能写) - 错误写法:
ServerName admin.nineopen.com:443(端口不应出现在 ServerName 中)
若还需支持带 www 的访问,用 ServerAlias 补充,它不参与证书校验,但必须也在证书 SAN 列表里:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
ServerName example.com<br>ServerAlias www.example.com
多个站点共用一台 Apache 时的关键点
每个 HTTPS 站点都要有独立的 <VirtualHost *:443> 块,并各自设置 ServerName + 对应证书路径:
-
site-a.com的虚拟主机写ServerName site-a.com,加载site-a.com.crt -
site-b.net的虚拟主机写ServerName site-b.net,加载site-b.net.crt
Apache 不会自动按域名分发证书——它靠 ServerName 匹配虚拟主机,再读取该块内的 SSLCertificateFile。错配会导致所有请求都用错证书,触发浏览器警告。
验证是否写对了
改完配置后别急着重启,先执行:
-
sudo apachectl configtest(检查语法) -
openssl x509 -in /path/to/your.crt -text -noout | grep -A1 "Subject Alternative Name"(确认证书实际覆盖哪些域名) - 用
curl -Iv https://your-domain.com查看 TLS 握手时返回的证书域名
只要 ServerName 和证书里的域名对得上,且文件路径无权限问题,HTTPS 就能正常建立。

















