Nginx 可通过一个 server 块让多个域名共用同一张泛域名 SSL 证书,前提是证书覆盖所有域名(如 *.example.com 需显式将 example.com 加入 SAN)、server_name 列出全部域名、ssl_certificate 路径统一指向该证书文件,并启用 SNI(现代版本默认支持)。

Nginx 可以让多个域名共用一张泛域名 SSL 证书,前提是这些域名都属于该泛域名覆盖范围,且配置方式符合 SNI 机制要求。关键不在于“写多少个 server 块”,而在于证书是否合法匹配、server_name 是否在证书有效范围内、以及是否统一指向同一套证书文件。
以下是最常用也最稳妥的配置方式:
确认泛域名证书覆盖范围
泛域名证书(如 *.example.com)默认只保护一级子域,例如:
• api.example.com
• shop.example.com
• blog.example.com
但不自动包含根域 example.com。若需支持根域,必须在申请证书时将其显式加入 SAN(Subject Alternative Name)列表。
单个 server 块配置多个域名
只要所有域名都在同一张证书覆盖范围内,就推荐用一个 server 块统一管理,避免重复配置:
- server_name 后列出全部要托管的域名,空格分隔
- ssl_certificate 和 ssl_certificate_key 指向同一组证书文件
- 确保 listen 443 ssl http2 已启用,并开启 SNI 支持(现代 Nginx 默认开启)
示例配置:
server {
listen 443 ssl http2;
server_name example.com www.example.com api.example.com shop.example.com;
<pre class='brush:php;toolbar:false;'>root /var/www/frontend;
index index.html;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# 其他 TLS 安全配置(可选)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:...;}
补充 80 端口重定向(强制 HTTPS)
为所有域名统一跳转到 HTTPS,可复用同一个 server 块处理 HTTP 请求:
server {
listen 80;
server_name example.com www.example.com api.example.com shop.example.com;
return 301 https://$host$request_uri;
}验证与生效
完成配置后务必执行三步:
- 运行 nginx -t 检查语法是否正确
- 使用 openssl s_client -connect example.com:443 -servername api.example.com 测试 SNI 是否能正确返回证书
- 执行 nginx -s reload 生效配置
注意:证书路径必须真实存在,权限应设为 root:root 且私钥文件权限为 600,否则 Nginx 启动会失败。


















