怎么设置泛解析所有域名SSL证书?通配符DNS+通配符证书完整配置

a
admin
作者
2026-08-13
发布日期
约 22 分钟
阅读时间

怎么设置泛解析所有域名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.comexample.com

效果

  • 浏览器访问任意 xxx.example.com 都显示绿色小锁
  • 不需要为每个子域名单独申请证书

两者配合的逻辑

  • DNS泛解析:让所有子域名都能解析到服务器IP
  • 通配符证书:让所有子域名访问HTTPS时都受信任

两者缺一不可

  • 只有DNS泛解析,没有通配符证书 → 子域名能访问但HTTPS报错
  • 只有通配符证书,没有DNS泛解析 → 证书有效但子域名无法解析

第一步:配置DNS泛解析

在阿里云DNS配置泛解析

  1. 登录阿里云DNS控制台
  2. 选择域名 → 解析设置
  3. 添加记录:
  • 主机记录*
  • 记录类型A
  • 解析线路:默认
  • 记录值:服务器IP(如 39.97.237.174
  • TTL:10分钟(默认)
  1. 点击”确认”

在腾讯云DNSPod配置泛解析

  1. 登录腾讯云DNSPod控制台
  2. 选择域名 → 添加记录
  3. 填写:
  • 主机记录*
  • 记录类型A
  • 线路类型:默认
  • 记录值:服务器IP
  • TTL:600
  1. 点击”保存”

在Cloudflare配置泛解析

  1. 登录Cloudflare控制台
  2. 选择域名 → DNS
  3. 添加记录:
  • TypeA
  • Name*
  • IPv4 address:服务器IP
  • Proxy status:DNS only(关闭代理,否则证书验证会失败)
  1. 点击”Save”

验证DNS泛解析

等待DNS生效后(通常10-30分钟),测试:

# 测试任意子域名是否解析到服务器IP
nslookup random123.yourdomain.com
dig random123.yourdomain.com +short

# 应该返回你的服务器IP

关键:测试时用一个随机子域名(如 test123456.yourdomain.com),如果解析成功说明泛解析生效。

第二步:申请通配符SSL证书

在sslmianfei.com申请

  1. 访问 sslmianfei.com
  2. 输入框输入 *.yourdomain.com
  3. 系统自动识别为通配符证书
  4. 点击”立即申请”

通配符证书的特点

  • 只支持DNS验证(不支持HTTP验证)
  • 90天有效期
  • 免费申请

配置DNS验证

系统会返回验证信息

  • 主机记录_abc123.yourdomain.com(前缀哈希)
  • 记录类型:CNAME
  • 记录值xyz789.zerossl.com

在DNS服务商添加CNAME记录

  • 主机记录:_abc123
  • 记录类型:CNAME
  • 记录值:xyz789.zerossl.com

重要:主机记录只填前缀哈希部分,不要包含域名后缀。详细说明参考 在线免费申请SSL证书如何做TXT解析验证

触发验证

  1. 等待DNS记录生效(10-30分钟)
  2. 在sslmianfei.com点击”验证解析”
  3. 验证通过后证书自动签发
  4. 下载证书文件:fullchain.crtprivate.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任务,到期前自动续期,完全无人值守。

高级配置

多主域名泛解析

如果有多个主域名都需要泛解析

  1. 每个主域名单独配置DNS泛解析
  2. 申请多域名通配符证书(包含 .domain1.com.domain2.com
  3. 部署到Nginx

CDN配合泛解析

如果使用CDN

  1. 在CDN控制台添加所有子域名(或使用通配符)
  2. 上传通配符证书到CDN
  3. 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生效
  • 检查是否有具体子域名记录(具体记录优先于泛解析)
  • nslookupdig 测试

问题二:通配符证书不覆盖主域名

原因*.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证书的完整配置流程

  1. 配置DNS泛解析:添加 * 记录指向服务器IP
  2. 申请通配符证书:在 sslmianfei.com 申请 *.yourdomain.com
  3. DNS验证:添加CNAME验证记录
  4. 部署证书:配置Nginx的通配符server块
  5. 配置HTTP跳转:80端口301跳转到HTTPS
  6. 验证配置:用 SSL检测工具 检测
  7. 自动续期:用acme.sh实现无人值守续期

核心组件

  • DNS泛解析:让所有子域名解析到服务器IP
  • 通配符证书:让所有子域名的HTTPS访问受信任

关键注意事项

  • DNS泛解析和通配符证书缺一不可
  • 通配符证书只支持DNS验证
  • 通配符证书90天有效期,建议用acme.sh自动续期
  • 使用fullchain(包含中间证书)
  • Nginx配置用 $host 而不是 $server_name 保持原子域名

配套文章

完成以上配置后,你的网站就支持任意子域名的HTTPS访问,新增子域名无需任何操作,证书自动覆盖。

本文到此结束