多个子域名分别部署阿里云的免费 SSL 证书

✅ 前提说明

假设你的网站结构如下:

域名 用途 是否使用独立证书
example.com 主站 ✅ 是(免费证书1)
www.example.com 主站别名 ✅ 与 example.com 同一张证书
blog.example.com 博客子站 ✅ 单独申请免费证书2
api.example.com 接口服务 ✅ 单独申请免费证书3

⚠️ 阿里云免费证书不支持通配符,所以每个子域都需要单独申请 + 单独部署


📦 第一步:在阿里云申请并下载证书

  1. 登录 阿里云 SSL 证书控制台
  2. 点击 “创建证书” → 选择 “免费版DV SSL”
  3. 输入你要保护的域名,例如:
    • 第一次:example.com(自动包含 www.example.com
    • 第二次:blog.example.com
    • 第三次:api.example.com
  4. 完成 域名验证(推荐 DNS 验证)
  5. 审核通过后,点击 “下载”
  6. 选择 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.comapi.example.com 等也做同样配置。


🧪 第四步:检查配置并重启 Nginx

# 检查配置是否正确
sudo nginx -t

# 重新加载配置(无需重启服务)
sudo nginx -s reload

🔐 第五步:验证 HTTPS 是否生效

打开浏览器访问:

✅ 应该都能看到绿色锁图标 🔒,无安全警告。

你也可以使用在线工具检测:


🔄 第六步:证书续期(关键!)

⚠️ 阿里云免费证书有效期为 1年,到期前需手动或自动续签

推荐做法:

  1. 提前15天登录阿里云控制台,找到即将过期的证书
  2. 点击 “续签”(免费证书可续签)
  3. 下载新证书,替换旧的 .pem 和 .key 文件
  4. 执行 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,只需部署一次,管理更省心。

posted @ 2025-08-21 17:57  随手一只风  阅读(30)  评论(0)    收藏  举报