前言
在这个时代,如果你的网站还在使用 HTTP 协议,浏览器地址栏那个刺眼的“不安全 (Not Secure)”提示,足以劝退 90% 的用户。
HTTPS 不仅能加密传输数据,防止被中间人劫持(比如被运营商强行插入广告),还能提升网站在搜索引擎(SEO)中的排名。
作为第一阶段的收官之作,今天我们将实战演示:如何在阿里云ECS上,利用 Let's Encrypt 免费申请 SSL 证书,并自动配置 Nginx,让你的网站拥有那把绿色的“小锁头”。
准备工作
- 一台安装好 Nginx 的阿里云 ECS 服务器(参考本系列第2篇)。
- 重点: 一个已经购买并解析到你服务器 IP 的域名(例如
www.example.com)。
- 注意:SSL证书是绑定域名的,不能绑定IP地址。
- 重点: 确保阿里云安全组已经开放了 443 端口(HTTPS 默认端口)。
第一步:安装 Certbot
我们将使用 Certbot 这个神器,它是 Let's Encrypt 官方推荐的客户端,能自动化完成证书申请和 Nginx 配置修改。
以 Alibaba Cloud Linux 3 / CentOS 7/8 为例:
Bash
# 1. 安装 EPEL 源 (如果之前装过可跳过) yum install -y epel-release # 2. 安装 Certbot 及其 Nginx 插件 yum install -y certbot python3-certbot-nginx
(如果是 Ubuntu 系统,使用 apt install certbot python3-certbot-nginx)
第二步:一键申请并配置证书
Certbot 最强大的地方在于它的 --nginx 插件,它会自动读取你的 Nginx 配置文件,帮你验证域名,甚至帮你修改配置。
运行以下命令(将 www.example.com 换成你的真实域名):
Bash
certbot --nginx -d www.example.com
执行过程中会发生什么?
- 输入邮箱: 第一次运行需要输入邮箱,用于接收证书过期提醒。
- 同意协议: 输入
Y同意服务条款。 - 验证域名: Certbot 会自动在你的 Nginx 目录下生成一个临时文件,Let's Encrypt 服务器会通过访问这个文件来确认“你确实拥有这个域名”。
- 自动修改配置: 验证成功后,Certbot 会询问是否自动将 HTTP 流量重定向到 HTTPS?
- 选
1(No redirect):不强制重定向。 - 选
2(Redirect):推荐选这个,自动把所有 HTTP 请求转到 HTTPS。
第三步:验证 Nginx 配置
如果上一步执行成功,你的 Nginx 配置文件(通常在 /etc/nginx/nginx.conf)已经被自动修改了。我们可以去看一眼它改了什么:
Bash
cat /etc/nginx/nginx.conf
你会发现多了一段类似这样的代码:
Nginx
server { listen 443 ssl; # 监听 443 端口 server_name www.example.com; # 证书路径(Certbot 自动生成的) ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem; # ... 其他 SSL 优化参数 ... }
第四步:测试 HTTPS
打开浏览器,访问 https://你的域名。 如果你看到了地址栏那把安全锁,恭喜你,你的网站已经进入加密时代!
常见排查:如果浏览器一直转圈无法访问,99% 是因为阿里云安全组没有开放 443 端口。请去阿里云控制台检查安全组规则。
第五步:设置自动续期
Let's Encrypt 的免费证书有效期只有 90天。虽然免费,但每三个月手动申请一次太麻烦了。好在 Certbot 自带续期功能。
- 模拟续期测试:先运行这行命令,确保续期流程没问题:
Bash
certbot renew --dry-run
- 如果显示
Congratulations, all renewals succeeded,说明自动续期配置正常。 - 加入定时任务:Certbot 通常会自动安装定时任务(systemd timer 或 cron),我们可以手动加一道保险。 输入
crontab -e,添加一行:
Bash
# 每月1号凌晨4点尝试续期,如果续期成功则重载 Nginx 0 4 1 * * certbot renew --quiet --deploy-hook "systemctl reload nginx"