🌐 阿里云 Linux 服务器 Let's Encrypt 免费 SSL 证书完整部署指南

🌐 阿里云 Linux 服务器 Let's Encrypt 免费 SSL 证书完整部署指南

适用系统 :Alibaba Cloud Linux 3(兼容 CentOS/RHEL)
Web 服务器 :Nginx
更新时间 :2025 年 11 月
作者:DevOps Guide


✅ 一、前提条件

在开始前,请确保满足以下条件:

要求 说明
1. 阿里云 ECS 实例 已创建,操作系统为 Alibaba Cloud Linux 3
2. 域名已解析 yourdomain.com 的 A 记录指向 ECS 公网 IP
3. 安全组开放端口 入方向允许 80 (HTTP)443 (HTTPS)(来源:0.0.0.0/0
4. 域名备案(中国大陆地域) 若 ECS 位于中国内地(如杭州、北京),必须完成 ICP 备案
5. 已安装 Nginx 且能通过 http://yourdomain.com 访问

🔍 验证域名解析:

bash 复制代码
dig yourdomain.com +short
# 应返回你的 ECS 公网 IP

🚀 二、完整操作流程

步骤 1:安装 Nginx(如未安装)

bash 复制代码
# 安装 Nginx
sudo dnf install -y nginx

# 启动并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx

步骤 2:配置 Nginx 站点(添加 server_name)

bash 复制代码
sudo vim /etc/nginx/conf.d/yourdomain.com.conf

写入以下内容:

nginx 复制代码
server {
    listen 80;
    server_name yourdomain.com;  # ← 必须包含你要申请证书的域名
    root /usr/share/nginx/html;
    index index.html;
}

测试并重载:

bash 复制代码
sudo nginx -t
sudo systemctl reload nginx

✅ 此时应能通过浏览器访问 http://yourdomain.com


步骤 3:安装 Certbot

bash 复制代码
# 安装 EPEL 仓库
sudo dnf install -y epel-release

# 安装 Certbot 及 Nginx 插件
sudo dnf install -y certbot python3-certbot-nginx

步骤 4:申请并安装 SSL 证书

bash 复制代码
sudo certbot --nginx -d yourdomain.com

执行时会提示:

  • 输入邮箱(用于过期提醒)
  • 同意服务条款(按 A
  • 是否重定向 HTTP → HTTPS(建议选 Yes

✅ 成功后,Nginx 会自动启用 HTTPS,访问 https://yourdomain.com 应显示安全锁图标。


步骤 5:验证证书信息

bash 复制代码
sudo certbot certificates

输出示例:

javascript 复制代码
Certificate Name: yourdomain.com
    Expiry Date: 2026-02-20 12:34:56+00:00 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/yourdomain.com/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/yourdomain.com/privkey.pem

步骤 6:配置自动续期(关键!)

6.1 测试续期流程(安全,不会真续)
bash 复制代码
sudo certbot renew --dry-run

✅ 应看到:Congratulations, all simulated renewals succeeded.

6.2 设置定时任务
bash 复制代码
sudo crontab -e

在打开的编辑器中i 进入插入模式,粘贴以下内容:

cron 复制代码
0 2 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"

保存退出:

  • ESC
  • 输入 :wq 并回车
6.3 验证 cron 是否设置成功
bash 复制代码
sudo crontab -l

应输出:

bash 复制代码
0 2 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"

🔍 三、常见问题排查

❌ 问题 1:申请证书时超时(Timeout during connect)

错误示例

arduino 复制代码
Fetching http://yourdomain.com/.well-known/acme-challenge/...: Timeout

原因与解决

原因 解决方案
阿里云安全组未开 80 端口 控制台 → 安全组 → 添加 80 入站规则
域名未备案(中国内地 ECS) 备案域名,或改用 DNS 验证(见附录)
DNS 未解析到公网 IP 检查 A 记录:dig yourdomain.com
本地防火墙阻止 检查:sudo firewall-cmd --list-ports(Alibaba Cloud Linux 默认关闭)

❌ 问题 2:Certbot 找不到 server_name

错误No matching server blocks located

解决

  • 确保 Nginx 配置中 server_name 精确包含 yourdomain.com
  • 配置文件必须在 /etc/nginx/conf.d/ 或被 nginx.confinclude 包含

❌ 问题 3:自动续期失败

排查步骤

bash 复制代码
# 查看 cron 执行日志
sudo grep CRON /var/log/cron

# 查看 certbot 日志
sudo tail -n 20 /var/log/letsencrypt/letsencrypt.log

# 手动运行续期(不静默)
sudo certbot renew

📎 附录:替代方案 ------ DNS 验证(无需 80 端口)

适用于:未备案域名无法开放 80 端口 的场景

步骤 A:获取阿里云 AccessKey

  1. 进入 RAM 控制台
  2. 创建用户,授权 AliyunDNSFullAccess
  3. 获取 AccessKey IDAccessKey Secret

步骤 B:配置 DNS 插件

bash 复制代码
# 安装插件
sudo dnf install -y certbot-dns-alidns

# 创建凭证文件
mkdir -p ~/.secrets
cat > ~/.secrets/alidns.ini <<EOF
dns_alidns_access_key = YOUR_ACCESS_KEY_ID
dns_alidns_secret_key = YOUR_ACCESS_KEY_SECRET
EOF

chmod 600 ~/.secrets/alidns.ini

步骤 C:申请证书

bash 复制代码
sudo certbot certonly \
  --dns-alidns \
  --dns-alidns-credentials ~/.secrets/alidns.ini \
  -d yourdomain.com

步骤 D:手动配置 Nginx HTTPS

编辑 /etc/nginx/conf.d/yourdomain.com.conf,添加:

nginx 复制代码
server {
    listen 443 ssl;
    server_name yourdomain.com;
    root /usr/share/nginx/html;

    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
}

重载 Nginx:

bash 复制代码
sudo nginx -t && sudo systemctl reload nginx

⚠️ DNS 验证方式 仍需配置自动续期 cron(同上)


✅ 四、总结

步骤 命令/操作 状态
1. 安装 Nginx sudo dnf install nginx
2. 配置站点 创建 /etc/nginx/conf.d/*.conf
3. 安装 Certbot sudo dnf install certbot...
4. 申请证书 sudo certbot --nginx -d yourdomain.com
5. 设置自动续期 sudo crontab -e + 添加任务
6. 测试续期 sudo certbot renew --dry-run

🎉 完成!你的网站现在拥有免费、自动更新的 HTTPS 加密。


🔗 官方参考

💡 提示 :每 3 个月手动运行一次 sudo certbot certificates 检查到期时间,确保万无一失。

相关推荐
yuanyxh21 分钟前
静默打印程序实现
前端·react.js·electron
三十_A1 小时前
如何正确实现圆角渐变边框?为什么 border-radius 对 border-image 不生效?
前端·css·css3
小满zs2 小时前
Next.js第十三章(缓存组件)
前端
前端老宋Running2 小时前
“受控组件”的诅咒:为什么你需要 React Hook Form + Zod 来拯救你的键盘?
前端·javascript·react.js
风止何安啊2 小时前
拿捏 React 组件通讯:从父子到跨组件的「传功秘籍」
前端·react.js·面试
懒得不想起名字2 小时前
将flutter打成aar包嵌入到安卓
前端
Highcharts.js2 小时前
官方文档|Angular 框架集成 Highcharts Dashboards
前端·javascript·angular.js·highcharts·看板·使用文档·dashboards
韭菜炒大葱3 小时前
React 新手村通关指南:状态、组件与魔法 UI 🧙‍♂️
前端·javascript·react.js
天天扭码3 小时前
深入MCP本质——编写自定义MCP Server并通过Cursor调用
前端·mcp
1024肥宅4 小时前
JavaScript性能与优化:手写实现关键优化技术
前端·javascript·面试