适用环境:CentOS Stream 9 / Rocky Linux 9
难度:中等
一、为什么要换
Nginx + Certbot(Let’s Encrypt)是经典组合,但日常维护有两个痛点:
- 证书每 90 天要续期,虽然 Certbot 有定时任务,但偶尔还是会因为网络、配置问题失败,需要人工处理。
- 配置相对繁琐:
server块、ssl证书路径、http跳https的301、gzip等都要手写。
Caddy 的核心卖点是自动 HTTPS:
- 首次启动访问域名时,自动向 Let’s Encrypt 申请证书,到期自动续期,无需任何定时任务。
- 配置极简,一个
Caddyfile就能同时搞定静态站和反向代理。 - 默认启用
HTTP/2、gzip压缩,零配置。
对于个人博客这类中小型站点,Caddy 能把最繁琐的证书管理彻底自动化。
二、安装 Caddy
CentOS Stream 9 通过官方 COPR 仓库安装:
| |
三、配置 Caddyfile
配置文件在 /etc/caddy/Caddyfile。语法核心是:域名后跟一个配置块,块内的指令按行排列。
| |
各指令说明:
root *:指定静态文件根目录,*表示匹配所有路径。encode gzip zstd:开启gzip/zstd压缩,减少传输体积。file_server:开启静态文件服务。reverse_proxy 127.0.0.1:3000:反向代理到本机3000端口,用于给其他服务(如自托管应用)提供域名和HTTPS。
配置好后检查语法:
| |
四、迁移步骤(顺序很重要)
关键点:先停 Nginx,再启 Caddy。ACME 证书验证需要占用 80 端口,如果 Nginx 还占着,Caddy 的证书签发会失败。
| |
日志中出现类似 certificate obtained successfully 即表示证书签发成功。这一步无需任何手动干预,Caddy 会自动完成:
- 向 Let’s Encrypt 申请证书
- 写入证书文件
- 配置
HTTPS并自动续期
注意:证书验证要求
80端口对外可达,且域名DNS已解析到服务器。如果之前Certbot签过证书,Caddy 会检测并复用,无需手动迁移。
五、验证
| |
浏览器访问站点,地址栏出现小锁图标即为成功。
六、(可选)卸载 Nginx 与 Certbot
确认迁移无误、站点稳定运行几天后,再清理旧组件:
| |
七、总结
迁移前后对比:
| 项目 | Nginx + Certbot | Caddy |
|---|---|---|
| 证书申请 | 手动配置 Certbot | 自动 |
| 证书续期 | 定时任务,需维护 | 自动,无需关心 |
| 静态站配置 | server 块 + ssl 等 20+ 行 | 3 行 |
| 反向代理 | proxy_pass + 头信息等 | 1 行 |
| HTTP/2、gzip | 需手动开启 | 默认开启 |
对于"域名 + 静态站 + 少量反代"的典型个人博客场景,Caddy 用最少的配置换来了全自动的 HTTPS,省心很多。