统一SSL证书批量绑定多跨境站点教程

如果你手里有多个面向不同国家的跨境站点,希望让它们都使用 HTTPS,又不想一个个去申请证书,那一张通配符 SSL 证书配合批量绑定操作就能省下大量时间。
这篇文章带你从头走一遍:从申请证书到批量配置站点,再到验证和避坑,全部基于实际场景,保证零基础也能按步骤完成。

准备工作

在开始之前,确保已经满足以下条件:

  • 服务器上安装了 Nginx(如果用宝塔面板,本质也是 Nginx),并开放了 80 和 443 端口。
  • 所有站点的域名都解析到了这台服务器的 IP。假设你有一个主域名 example.com,其他站点是 site1.example.com、site2.example.com 等形式。
  • 拥有服务器 root 权限(或能执行 sudo 命令)。如果是宝塔面板,需要能通过 SSH 执行命令行,或者能用面板的文件管理功能。
  • 决定要使用的证书类型:推荐 Let's Encrypt 通配符证书(免费,自动续期),或者商业通配符证书。本文以 Let's Encrypt 为例。

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

使用 acme.sh 脚本申请证书是目前比较稳定的方式。
登录到服务器,执行以下命令安装 acme.sh:

curl https://get.acme.sh | sh -s email=your-email@example.com

安装完成后,配置 DNS API 自动验证(以 Cloudflare 为例,其他 DNS 服务商类似)。
先设置 Cloudflare 的 API Token:

export CF_Token="你的API Token"
export CF_Account_ID="你的账户ID"

然后申请通配符证书:

acme.sh --issue --dns dns_cf -d example.com -d '*.example.com'

申请成功后,证书文件会存储在 ~/.acme.sh/example.com/ 目录下。
我们需要把它们复制到 Nginx 统一使用的路径:

mkdir -p /etc/ssl/example/
cp ~/.acme.sh/example.com/fullchain.cer /etc/ssl/example/fullchain.cer
cp ~/.acme.sh/example.com/example.com.key /etc/ssl/example/example.com.key
注意:让证书文件对所有用户可读(chmod 644),或者确保 Nginx 用户(通常是 www-data)有权读取。

第二步:批量配置 Nginx 站点使用同一证书

如果你使用纯 Nginx,每个站点的配置文件通常放在 /etc/nginx/sites-available/ 下。
打开每个站点的 server 块,修改 SSL 配置部分:

server {
    listen 443 ssl;
    server_name site1.example.com;

    ssl_certificate /etc/ssl/example/fullchain.cer;
    ssl_certificate_key /etc/ssl/example/example.com.key;

    # 其余配置(root, index 等)保持不变
}

如果站点数量很多,可以用一行 sed 命令批量替换。
例如,假设所有站点配置中都还没有 SSL 配置,可以统一添加:

cd /etc/nginx/sites-available/
for file in *; do
    if grep -q 'listen 443' "$file"; then
        echo "$file 已有 SSL 配置,跳过"
    else
        # 在文件末尾追加 SSL 配置块(需要依据实际情况调整)
        cat >> "$file" <

之后检查 Nginx 配置是否正确:

nginx -t

如果没问题,重启 Nginx:

systemctl reload nginx

如果你使用的是 宝塔面板,可以通过 SSH 直接修改 /www/server/panel/vhost/nginx/ 下的站点配置文件。
宝塔每个站点独立一个 .conf 文件,用 sed 批量修改 SSL 证书路径即可:

cd /www/server/panel/vhost/nginx/
sed -i "s|ssl_certificate .*|ssl_certificate /etc/ssl/example/fullchain.cer;|" *.conf
sed -i "s|ssl_certificate_key .*|ssl_certificate_key /etc/ssl/example/example.com.key;|" *.conf

修改后同样需要在宝塔面板中重启 Nginx 服务。

第三步:自动续期与避坑指南

Let's Encrypt 证书有效期 90 天,acme.sh 会自动添加 cron 任务续期。
但续期后需要重载 Nginx 让新证书生效。
如果自动重载没生效,可以手动添加一条命令到 cron:

acme.sh --renew -d example.com --dns dns_cf | bash
nginx -t && systemctl reload nginx

常见避坑

  • 通配符证书仅能覆盖一级子域名。比如 *.example.com 可以保护 site1.example.com,但不能保护 sub.site1.example.com。如果跨境站点有多级域名,需要单独申请对应证书。
  • 证书文件权重要确保 Nginx 能读取。如果重启后报 permission denied,检查文件权限:chmod 644 /etc/ssl/example/*
  • DNS 验证失败:检查 API Token 是否有足够权限,或使用手动添加 TXT 记录的方式。
  • 配置语法错误:批量修改后一定执行 nginx -t 再重载,避免整个 Nginx 崩溃。

第四步:验证效果

用 curl 测试每个站点的 HTTPS 连接,确保返回 200 状态码且证书信息正确:

curl -I https://site1.example.com

输出中应出现 HTTP/2 200 并带有 SSL 相关响应头。
也可以直接打开浏览器访问 https://site1.example.com,点击地址栏锁图标查看证书详情,确认颁发给 *.example.com

高频问题解答

Q:如果站点多了,手动修改配置太慢怎么办?
A:可以先写一个通用配置文件只包含 SSL 设置,然后用 include 语句在每个站点配置中引用。或者使用 Ansible、SaltStack 等自动化工具。

Q:商业通配符证书也能这样批量绑定吗?
A:可以,只需把证书和密钥文件放在统一路径,然后在 Nginx 配置中引用即可,原理完全相同。

Q:证书续期后是否需要逐个重新绑定?
A:不需要,因为你已经把证书路径写死到 Nginx 配置中。续期后覆盖相同路径的文件,再重载 Nginx 即可。

Q:我在宝塔面板的「网站」设置里看不到证书共用选项?
A:宝塔面板目前不支持在 UI 上直接为多个站点绑定同一证书,必须通过修改配置文件实现。本文提供的 sed 方法可以帮你快速完成。

如果你遇到了本文未覆盖的异常情况,建议先检查 Nginx 错误日志(/var/log/nginx/error.log)和证书文件路径是否正确。
一次性搞定多个站点的 HTTPS,这个操作值得收藏。

分享到:
上一篇
Linux脚本实时监控服务器异常告警推送
下一篇
数据库连接数耗尽站点卡顿优化方案
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意