Nginx支持通配符SSL证书需满足:证书为*.example.com且含SAN根域;配置中用正则server_name ~^(?.+).example.com$统一匹配二级域名,并复用同一证书文件。

要让 Nginx 支持通配符(Wildcard)SSL 证书并正确服务所有二级域名,核心在于:证书本身必须是合法签发的 *.example.com 类型,Nginx 配置需统一复用该证书,并通过 server_name 指令灵活匹配任意二级域名。
确认通配符证书已正确申请和部署
通配符证书只能覆盖一级子域(如 a.example.com、b.example.com),不能覆盖 a.b.example.com 或 example.com(根域)。申请时 CSR 的 Common Name 必须为 *.example.com,且建议同时在 Subject Alternative Names(SAN)中加入 example.com,以兼顾根域访问。
证书文件通常包括:
- fullchain.pem:证书链 + 域名证书(推荐 Nginx 使用)
-
privkey.pem:私钥文件(权限建议设为
600)
将这两个文件放到安全路径下(如 /etc/nginx/ssl/example.com/),确保 Nginx 进程可读。
配置单个 server 块匹配所有二级域名
无需为每个二级域名写独立的 server 块。利用 Nginx 的通配符 server_name 语法即可统一处理:
server {
listen 443 ssl http2;
server_name ~^(?<subdomain>.+)\.example\.com$;
<pre class="brush:php;toolbar:false;">ssl_certificate /etc/nginx/ssl/example.com/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/example.com/privkey.pem;
# 可选:把匹配到的子域名传给后端(如用于路由或日志)
set $subdomain_name $subdomain;
location / {
proxy_pass https://backend;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}}
说明:
-
~^...表示正则匹配;(?<subdomain>.+)</subdomain>捕获子域名部分(如api来自api.example.com) - 该配置会匹配
a.example.com、test.example.com,但不匹配example.com或dev.a.example.com - 若需同时支持根域,另加一个
server_name example.com;的独立 server 块,共用同一套证书(前提是证书 SAN 包含它)
补充根域名与重定向逻辑(可选但推荐)
用户常直接访问 example.com,建议显式处理:
server {
listen 443 ssl http2;
server_name example.com;
<pre class="brush:php;toolbar:false;">ssl_certificate /etc/nginx/ssl/example.com/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/example.com/privkey.pem;
return 301 https://www.example.com$request_uri;}
server { listen 443 ssl http2; server_name www.example.com;
ssl_certificate /etc/nginx/ssl/example.com/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/example.com/privkey.pem; # 实际业务配置...
}
这样既保证 HTTPS 全覆盖,又避免因证书不匹配导致浏览器警告。
验证与调试要点
配置完成后务必执行以下检查:
- 运行
sudo nginx -t确认语法无误 - 重载配置:
sudo nginx -s reload - 用
curl -I https://sub.example.com查看响应头中的Server和证书信息 - 访问 SSL Labs Test 验证证书是否被正确识别为通配符,且无链路错误
- 检查 Nginx 错误日志(
/var/log/nginx/error.log)是否有 SSL 加载失败提示,常见于权限不足或路径错误

















