怎么设置泛解析所有域名SSL证书?通配符DNS+通配符证书完整配置
怎么设置泛解析所有域名SSL证书?通配符DNS+通配符证书完整配置
很多站长想实现”任意子域名都能访问HTTPS”的效果,这需要两个东西配合:DNS泛解析 + 通配符SSL证书。这篇把泛解析所有域名SSL证书的完整配置流程讲清楚,从DNS到证书到服务器全覆盖。
泛解析SSL证书的两个核心组件
组件一:DNS泛解析
DNS泛解析是把所有未明确解析的子域名都指向同一个IP。
泛解析记录格式:
- •主机记录:
* - •记录类型:A(或CNAME)
- •记录值:服务器IP(或目标域名)
效果:
- •用户访问
www.example.com→ 解析到服务器IP - •用户访问
api.example.com→ 解析到服务器IP - •用户访问
任意名字.example.com→ 解析到服务器IP
组件二:通配符SSL证书
通配符SSL证书是绑定 *.example.com 的证书,覆盖所有一级子域名。
证书格式:
- •CN(通用名):
*.example.com - •SAN(主题备用名称):包含
*.example.com和example.com
效果:
- •浏览器访问任意
xxx.example.com都显示绿色小锁 - •不需要为每个子域名单独申请证书
两者配合的逻辑
- •DNS泛解析:让所有子域名都能解析到服务器IP
- •通配符证书:让所有子域名访问HTTPS时都受信任
两者缺一不可:
- •只有DNS泛解析,没有通配符证书 → 子域名能访问但HTTPS报错
- •只有通配符证书,没有DNS泛解析 → 证书有效但子域名无法解析
第一步:配置DNS泛解析
在阿里云DNS配置泛解析
- 登录阿里云DNS控制台
- 选择域名 → 解析设置
- 添加记录:
- •主机记录:
* - •记录类型:
A - •解析线路:默认
- •记录值:服务器IP(如
39.97.237.174) - •TTL:10分钟(默认)
- 点击”确认”
在腾讯云DNSPod配置泛解析
- 登录腾讯云DNSPod控制台
- 选择域名 → 添加记录
- 填写:
- •主机记录:
* - •记录类型:
A - •线路类型:默认
- •记录值:服务器IP
- •TTL:600
- 点击”保存”
在Cloudflare配置泛解析
- 登录Cloudflare控制台
- 选择域名 → DNS
- 添加记录:
- •Type:
A - •Name:
* - •IPv4 address:服务器IP
- •Proxy status:DNS only(关闭代理,否则证书验证会失败)
- 点击”Save”
验证DNS泛解析
等待DNS生效后(通常10-30分钟),测试:
# 测试任意子域名是否解析到服务器IP
nslookup random123.yourdomain.com
dig random123.yourdomain.com +short
# 应该返回你的服务器IP
关键:测试时用一个随机子域名(如 test123456.yourdomain.com),如果解析成功说明泛解析生效。
第二步:申请通配符SSL证书
在sslmianfei.com申请
- 访问 sslmianfei.com
- 输入框输入
*.yourdomain.com - 系统自动识别为通配符证书
- 点击”立即申请”
通配符证书的特点:
- •只支持DNS验证(不支持HTTP验证)
- •90天有效期
- •免费申请
配置DNS验证
系统会返回验证信息:
- •主机记录:
_abc123.yourdomain.com(前缀哈希) - •记录类型:CNAME
- •记录值:
xyz789.zerossl.com
在DNS服务商添加CNAME记录:
- •主机记录:
_abc123 - •记录类型:CNAME
- •记录值:
xyz789.zerossl.com
重要:主机记录只填前缀哈希部分,不要包含域名后缀。详细说明参考 在线免费申请SSL证书如何做TXT解析验证。
触发验证
- 等待DNS记录生效(10-30分钟)
- 在sslmianfei.com点击”验证解析”
- 验证通过后证书自动签发
- 下载证书文件:
fullchain.crt和private.key
第三步:部署证书到服务器
Nginx配置通配符证书
单个server块处理所有子域名:
server {
listen 443 ssl http2;
server_name *.yourdomain.com yourdomain.com;
ssl_certificate /etc/nginx/ssl/fullchain.crt;
ssl_certificate_key /etc/nginx/ssl/private.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;
# 根据子域名动态指定根目录
set $subdomain "";
if ($host ~* "^([^.]+)\.yourdomain\.com$") {
set $subdomain $1;
}
# 主域名指向根目录
if ($host = "yourdomain.com") {
set $subdomain "www";
}
root /var/www/$subdomain;
index index.html index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
效果:
- •
www.yourdomain.com→/var/www/www/ - •
api.yourdomain.com→/var/www/api/ - •
blog.yourdomain.com→/var/www/blog/ - •
任意.yourdomain.com→/var/www/任意/
多server块处理不同子域名
如果想给不同子域名不同的配置:
# www子域名
server {
listen 443 ssl http2;
server_name www.yourdomain.com;
ssl_certificate /etc/nginx/ssl/fullchain.crt;
ssl_certificate_key /etc/nginx/ssl/private.key;
root /var/www/www;
location / {
try_files $uri $uri/ /index.php?$args;
}
}
# api子域名
server {
listen 443 ssl http2;
server_name api.yourdomain.com;
ssl_certificate /etc/nginx/ssl/fullchain.crt;
ssl_certificate_key /etc/nginx/ssl/private.key;
root /var/www/api;
location / {
try_files $uri $uri/ /index.php?$args;
}
}
# 默认处理所有其他子域名
server {
listen 443 ssl http2;
server_name *.yourdomain.com;
ssl_certificate /etc/nginx/ssl/fullchain.crt;
ssl_certificate_key /etc/nginx/ssl/private.key;
root /var/www/default;
location / {
try_files $uri $uri/ /index.php?$args;
}
}
注意:所有server块使用同一张通配符证书。
配置HTTP跳转HTTPS
# HTTP 301跳转到HTTPS
server {
listen 80;
server_name *.yourdomain.com yourdomain.com;
return 301 https://$host$request_uri;
}
关键:使用 $host 而不是 $server_name,这样跳转后URL保持原子域名。
第四步:验证配置
重启Nginx
nginx -t
systemctl reload nginx
测试访问
测试多个子域名:
- •访问
https://www.yourdomain.com - •访问
https://api.yourdomain.com - •访问
https://blog.yourdomain.com - •访问
https://random.yourdomain.com
所有子域名应该都显示绿色小锁。
在线检测
用 SSL证书配置检测工具 检测任意子域名的证书配置:
- •证书链是否完整
- •TLS版本是否安全
- •证书品牌和有效期
第五步:自动续期
免费通配符证书90天有效期,建议用acme.sh自动续期。
安装acme.sh
curl https://get.acme.sh | sh
申请通配符证书(DNS验证)
阿里云DNS:
export Ali_Key="your_aliyun_key"
export Ali_Secret="your_aliyun_secret"
acme.sh --issue --dns dns_ali -d yourdomain.com -d *.yourdomain.com
腾讯云DNSPod:
export Tx_Secret="your_tencent_secret"
export Tx_Key="your_tencent_key"
acme.sh --issue --dns dns_tencent -d yourdomain.com -d *.yourdomain.com
Cloudflare:
export CF_Key="your_cf_key"
export CF_Email="your_email@example.com"
acme.sh --issue --dns dns_cf -d yourdomain.com -d *.yourdomain.com
安装证书到Nginx
acme.sh --install-cert -d yourdomain.com \
--key-file /etc/nginx/ssl/yourdomain.key \
--fullchain-file /etc/nginx/ssl/yourdomain.crt \
--reloadcmd "systemctl reload nginx"
acme.sh自动创建cron任务,到期前自动续期,完全无人值守。
高级配置
多主域名泛解析
如果有多个主域名都需要泛解析:
- 每个主域名单独配置DNS泛解析
- 申请多域名通配符证书(包含
.domain1.com和.domain2.com) - 部署到Nginx
CDN配合泛解析
如果使用CDN:
- 在CDN控制台添加所有子域名(或使用通配符)
- 上传通配符证书到CDN
- CDN节点使用通配符证书处理所有子域名
详细CDN配置参考 阿里云CDN配置SSL证书教程 和 腾讯云CDN配置SSL证书教程。
动态子域名路由
如果需要根据子域名动态路由到不同服务:
server {
listen 443 ssl http2;
server_name *.yourdomain.com;
ssl_certificate /etc/nginx/ssl/fullchain.crt;
ssl_certificate_key /etc/nginx/ssl/private.key;
# 根据子域名代理到不同端口
set $backend "";
if ($host ~* "^([^.]+)\.yourdomain\.com$") {
set $subdomain $1;
}
# www → 3000端口
if ($subdomain = "www") {
set $backend "http://127.0.0.1:3000";
}
# api → 4000端口
if ($subdomain = "api") {
set $backend "http://127.0.0.1:4000";
}
# 默认 → 8080端口
if ($backend = "") {
set $backend "http://127.0.0.1:8080";
}
location / {
proxy_pass $backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
常见问题
问题一:泛解析不生效
原因:DNS记录未生效,或存在具体子域名记录优先级更高。
解决:
- •等待10-30分钟DNS生效
- •检查是否有具体子域名记录(具体记录优先于泛解析)
- •用
nslookup或dig测试
问题二:通配符证书不覆盖主域名
原因:*.example.com 不覆盖 example.com 本身。
解决:
- •申请时把主域名加入SAN(sslmianfei.com会自动处理)
- •或单独为
example.com申请一张证书
详细说明参考 通配符证书能管多少个二级域名。
问题三:某些子域名HTTPS报错
原因:可能是具体子域名配置了不同证书,或证书链不完整。
解决:
- •检查Nginx配置是否有冲突的server块
- •确认使用fullchain(包含中间证书)
- •用 SSL检测工具 检测具体子域名
问题四:CDN模式下通配符证书不生效
原因:CDN节点需要单独配置通配符证书。
解决:
- •上传通配符证书到CDN控制台
- •确保CDN域名和通配符证书匹配
- •关闭源站的强制HTTPS跳转,由CDN处理
问题五:acme.sh续期失败
原因:DNS API密钥失效,或DNS服务商变更。
解决:
- •重新生成DNS API密钥
- •更新acme.sh的环境变量
- •手动执行
acme.sh --renew -d yourdomain.com测试
总结
泛解析所有域名SSL证书的完整配置流程:
- 配置DNS泛解析:添加
*记录指向服务器IP - 申请通配符证书:在 sslmianfei.com 申请
*.yourdomain.com - DNS验证:添加CNAME验证记录
- 部署证书:配置Nginx的通配符server块
- 配置HTTP跳转:80端口301跳转到HTTPS
- 验证配置:用 SSL检测工具 检测
- 自动续期:用acme.sh实现无人值守续期
核心组件:
- •DNS泛解析:让所有子域名解析到服务器IP
- •通配符证书:让所有子域名的HTTPS访问受信任
关键注意事项:
- •DNS泛解析和通配符证书缺一不可
- •通配符证书只支持DNS验证
- •通配符证书90天有效期,建议用acme.sh自动续期
- •使用fullchain(包含中间证书)
- •Nginx配置用
$host而不是$server_name保持原子域名
配套文章:
完成以上配置后,你的网站就支持任意子域名的HTTPS访问,新增子域名无需任何操作,证书自动覆盖。