一个通配符SSL证书可服务多个域名,需证书覆盖所有域名(如*.example.com及SAN中的example.com、www.example.com等),Nginx用单个server块声明全部server_name并共享证书路径,配合80端口301重定向和SNI实现统一HTTPS管理。

Nginx 配置多域名共用一个通配符 SSL 证书,核心在于证书覆盖范围匹配 + server_name 精确声明 + 单一 server 块统一管理。这不是“多个证书共存”,而是“一个证书服务多个合法域名”。
通配符证书必须覆盖所有目标域名
*.example.com 只能匹配一级子域(如 www.example.com、api.example.com),但不能匹配:
- 根域名
example.com(需额外加入 SAN 列表) - 多级子域
dev.api.example.com(不支持嵌套通配)
申请证书时务必确认:
- 主体为
*.example.com - Subject Alternative Names(SAN)中包含
example.com和所有要用的子域名(如shop.example.com、blog.example.com) - 若需
dev.api.example.com,应单独申请*.api.example.com或使用多域名证书替代
用一个 server 块配置全部域名
所有域名共享同一证书路径、同一根目录、同一 HTTPS 配置,只需在 server_name 中空格分隔:
server {
listen 443 ssl http2;
server_name example.com www.example.com api.example.com shop.example.com;
root /var/www/example;
index index.html;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
location / {
try_files $uri $uri/ =404;
}
}✅ Nginx 通过 SNI 自动将该证书返回给任一
server_name域名,无需额外逻辑。
补充 HTTP 全站重定向
避免用户访问 http://www.example.com 时走明文,加一个通用 80 端口块:
server {
listen 80;
server_name example.com www.example.com api.example.com shop.example.com;
return 301 https://$host$request_uri;
}验证是否生效
别只靠浏览器刷新,用 OpenSSL 直接测 TLS 层:
openssl s_client -connect your.ip:443 -servername api.example.com -showcerts 2>/dev/null | openssl x509 -noout -subject
输出应含 CN = *.example.com 或 DNS:example.com, DNS:www.example.com...,说明证书正确加载。
不复杂但容易忽略


















