1. 为什么你需要自动化 HTTPS 部署?
如果你自己折腾过网站,肯定对下面这个场景不陌生:好不容易把网站搭起来,域名也解析好了,结果浏览器上那个“不安全”的小锁头一直亮着,看着就让人心里不踏实。然后你开始研究 SSL 证书,发现商业证书一年要好几百甚至上千,免费的要么流程复杂,要么三个月就过期,手动续期简直是运维的噩梦。更别提当你有多个域名、甚至多个子域名需要管理时,手动配置和更新证书的工作量会呈指数级增长。
这就是为什么我们需要一套自动化、高效率的解决方案。想象一下,你的网站能自动获取并更新免费的、受浏览器信任的 SSL 证书,同时承载流量的 Web 服务器性能强劲、配置灵活,还能轻松管理成百上千个域名的转发规则。这听起来像是大公司的专属架构?其实不然,利用 Let‘s Encrypt 和 OpenResty 这两大神器,个人开发者或中小团队也能轻松搭建出这样一套企业级的自动化 HTTPS 部署与域名管理流水线。
我自己的好几个项目,从个人博客到内部工具平台,都跑在这套组合上。最直观的感受就是“省心”。证书快过期了?系统自己会在半夜默默更新好,我完全不用惦记。新加一个测试用的子域名?写几行配置,重启一下服务,几分钟就搞定,HTTPS 自动生效。这套方案的核心价值,就是把我们从繁琐、重复的运维操作中解放出来,让我们能更专注于业务开发本身。接下来,我就把自己踩过坑、验证过的最佳实践,掰开揉碎了分享给你。
2. 搭建前的准备:认识你的工具
工欲善其事,必先利其器。在动手之前,我们得先搞清楚手里的“家伙事儿”到底能干什么。
2.1 Let‘s Encrypt:你的免费、自动化证书颁发机构
Let‘s Encrypt 绝对可以说是互联网的“活雷锋”。它是一个非营利的证书颁发机构(CA),宗旨就是让整个 Web 都启用 HTTPS。它提供的 SSL/TLS 证书完全免费,并且被所有主流浏览器和操作系统信任。这意味着你用它的证书,用户访问你的网站时,浏览器会显示漂亮的安全锁标志,和付费证书的效果一模一样。
但 Let‘s Encrypt 最厉害的地方在于自动化。它设计了一套名为 ACME(自动证书管理环境)的协议。简单理解,就是你的服务器可以通过这套协议和 Let‘s Encrypt 的服务器“对话”,自动完成域名所有权验证、证书申请、签发和续期的全过程,无需人工干预。证书有效期是 90 天,这听起来很短,但正是为了鼓励和强制大家使用自动化续期,从而保证安全性的持续有效。我们后面要用的 Certbot,就是官方推荐的、实现了 ACME 协议的客户端工具,用起来非常顺手。
2.2 OpenResty:不只是 Nginx,更是高性能应用平台
很多人以为 OpenResty 就是个高性能的 Nginx。这么说对,但不全对。OpenResty 的创始人章亦春老师给它下的定义是“一个基于 Nginx 与 Lua 的高性能 Web 平台”。它内置了 LuaJIT 引擎,让你可以直接在 Nginx 的配置文件中嵌入 Lua 脚本,或者编写复杂的 Lua 应用。
这带来了无与伦比的灵活性。比如,我们可以在流量入口处(OpenResty)用 Lua 脚本动态判断请求该转发到哪个后端服务,或者直接生成 API 响应,甚至连接数据库做认证。对于我们的场景来说,OpenResty 相比原生 Nginx 有几个关键优势:1) 动态加载 SSL 证书:通过 Lua 模块,可以实现不重启服务就热更新证书,这对自动化续期后的证书生效至关重要。2) 更精细的流量控制:用 Lua 可以轻松编写复杂的域名匹配、路由规则。3) 性能极致:它继承了 Nginx 的高并发处理能力,同时通过 LuaJIT 保证了扩展逻辑的执行效率。
简单说,Let‘s Encrypt 负责自动化地提供“安全凭证”(SSL 证书),而 OpenResty 负责高效、智能地使用这些凭证来管理流量。两者结合,就构成了我们自动化部署体系的基石。
3. 一步步搭建自动化 HTTPS 基础设施
理论说再多不如动手做一遍。我们假设你有一台安装了 Ubuntu 20.04/22.04 的云服务器,并且已经将你的主域名(例如 yourdomain.com)解析到了这台服务器的公网 IP 地址。
3.1 安装与配置 Certbot:让证书获取变简单
首先,更新系统包列表并安装 Certbot。这里我们使用系统包管理器安装,最简单稳定。
sudo apt update
sudo apt install certbot -y
安装完成后,我们就可以申请证书了。Let‘s Encrypt 验证你对域名拥有权的方式主要有两种:HTTP-01 和 DNS-01 挑战。
- HTTP-01:Certbot 会在你的服务器上临时启动一个 web 服务(使用 80 端口),Let‘s Encrypt 的服务器会尝试访问一个特定的 URL 来验证。这要求你的服务器 80 端口可被公网访问。对于大多数有公网 IP 的服务器,这是最方便的方式。
- DNS-01:Certbot 会要求你在域名的 DNS 解析记录里添加一条特定的 TXT 记录。这种方式特别适合那些服务器端口不开放(比如某些企业内网穿透),或者你要申请通配符证书(
*.yourdomain.com)的情况。
我们先演示最常用的 HTTP-01 方式(Standalone 模式)申请单个域名和通配符证书:
# 申请包含主域名和通配符子域名的证书
sudo certbot certonly --standalone --agree-tos --no-eff-email --ema



被折叠的 条评论
为什么被折叠?



