多个子域名分别部署阿里云的免费 SSL 证书
✅ 前提说明
假设你的网站结构如下:
域名 | 用途 | 是否使用独立证书 |
---|---|---|
example.com |
主站 | ✅ 是(免费证书1) |
www.example.com |
主站别名 | ✅ 与 example.com 同一张证书 |
blog.example.com |
博客子站 | ✅ 单独申请免费证书2 |
api.example.com |
接口服务 | ✅ 单独申请免费证书3 |
⚠️ 阿里云免费证书不支持通配符,所以每个子域都需要单独申请 + 单独部署。
📦 第一步:在阿里云申请并下载证书
- 登录 阿里云 SSL 证书控制台
- 点击 “创建证书” → 选择 “免费版DV SSL”
- 输入你要保护的域名,例如:
- 第一次:
example.com
(自动包含www.example.com
) - 第二次:
blog.example.com
- 第三次:
api.example.com
- 第一次:
- 完成 域名验证(推荐 DNS 验证)
- 审核通过后,点击 “下载”
- 选择 Nginx 类型,下载
.pem
和.key
文件
下载后你会得到两个文件:
example.com.pem
(证书文件)example.com.key
(私钥文件)
建议按域名命名并存放到统一目录,例如:
/etc/nginx/ssl/example.com/
├── example.com.pem
├── example.com.key
/etc/nginx/ssl/blog.example.com/
├── blog.example.com.pem
├── blog.example.com.key
/etc/nginx/ssl/api.example.com/
├── api.example.com.pem
├── api.example.com.key
🛠️ 第二步:为每个域名配置 Nginx Server 块
✅ 示例1:主域名 example.com
+ www.example.com
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/nginx/ssl/example.com/example.com.pem;
ssl_certificate_key /etc/nginx/ssl/example.com/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;
ssl_prefer_server_ciphers off;
root /var/www/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
✅ 示例2:子域名 blog.example.com
server {
listen 443 ssl;
server_name blog.example.com;
ssl_certificate /etc/nginx/ssl/blog.example.com/blog.example.com.pem;
ssl_certificate_key /etc/nginx/ssl/blog.example.com/blog.example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;
ssl_prefer_server_ciphers off;
root /var/www/blog;
index index.html index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
# 如果是 PHP 项目,可添加以下配置
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
✅ 示例3:API 子域名 api.example.com
server {
listen 443 ssl;
server_name api.example.com;
ssl_certificate /etc/nginx/ssl/api.example.com/api.example.com.pem;
ssl_certificate_key /etc/nginx/ssl/api.example.com/api.example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;
ssl_prefer_server_ciphers off;
# 反向代理到后端服务
location / {
proxy_pass http://127.0.0.1:3000;
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;
}
}
🔁 第三步:HTTP 自动跳转 HTTPS(可选但推荐)
为每个域名添加一个 listen 80
的 server 块,实现自动跳转:
server {
listen 80;
server_name blog.example.com;
return 301 https://blog.example.com$request_uri;
}
对
example.com
、api.example.com
等也做同样配置。
🧪 第四步:检查配置并重启 Nginx
# 检查配置是否正确
sudo nginx -t
# 重新加载配置(无需重启服务)
sudo nginx -s reload
🔐 第五步:验证 HTTPS 是否生效
打开浏览器访问:
✅ 应该都能看到绿色锁图标 🔒,无安全警告。
你也可以使用在线工具检测:
🔄 第六步:证书续期(关键!)
⚠️ 阿里云免费证书有效期为 1年,到期前需手动或自动续签
推荐做法:
- 提前15天登录阿里云控制台,找到即将过期的证书
- 点击 “续签”(免费证书可续签)
- 下载新证书,替换旧的
.pem
和.key
文件 - 执行
nginx -s reload
重载配置
✅ 或使用脚本自动化续期(如结合 acme.sh
,但阿里云原生不支持自动推送)
✅ 总结:Nginx 多域名 SSL 部署要点
步骤 | 说明 |
---|---|
1️⃣ 申请证书 | 每个域名(含子域名)单独申请阿里云免费SSL |
2️⃣ 下载证书 | 保存为 .pem 和 .key ,按域名分类存放 |
3️⃣ 配置 Nginx | 每个 server{} 块使用对应证书路径 |
4️⃣ 重载 Nginx | nginx -t && nginx -s reload |
5️⃣ 定期续期 | 每年手动续签,避免证书过期 |
🎯 建议:
如果你有 3 个以上子域名,建议直接购买一张 通配符证书(*.example.com
),只需部署一次,管理更省心。
本文来自博客园,作者:随手一只风,转载请注明原文链接:https://www.cnblogs.com/suishou/p/19051321