📌 项目地址:caddyserver/caddy | ⭐ 76,430 颗星 | 🔧 Go | 📜 未标注
它解决什么问题
配过 Nginx + Certbot 的人都知道那套流程有多碎:装服务器、装证书工具、写续期定时任务,OCSP 一出问题整个站点跟着挂。Caddy 把这些全部自动化了。公网域名走 ZeroSSL 和 Let’s Encrypt 自动签发证书,一家机构出问题会自动切换到另一家。内网域名和 IP 地址也不含糊,Caddy 内置了一个本地 CA 来签证书,内网服务同样能有正常的 HTTPS。
还有一点很少见:官方明确说,其他服务器因为 TLS、OCSP 或证书问题宕机时,Caddy 能继续运行。这是架构层面的设计目标,不是宣传语。
几个硬指标
- 76,430 个 star,Go 编写
- 官方称已在生产环境服务数万亿请求、管理数百万张 TLS 证书,可扩展到数十万个站点
- HTTP/1.1、HTTP/2、HTTP/3 全部默认开启
- 单个二进制文件,没有外部依赖,连 libc 都不需要
最后一条值得多说一句。因为不依赖 libc,同一个二进制可以直接扔到各种 Linux 发行版和 ARM 设备上跑,不用操心 glibc 版本冲突。这在嵌入式设备和容器镜像里很省事。
安装和构建
最简单的装法:去 GitHub Releases 下载可执行文件,放进 PATH,完事。
想从源码构建(开发用途):
$ git clone "https://github.com/caddyserver/caddy.git"
$ cd caddy/cmd/caddy/
$ go build
要求 Go 1.26.0 或更新版本。官方有个提醒:这样构建出来的二进制不会嵌入正确的版本信息,需要版本号或者想带插件,去看 README 下一节的说明。
配置怎么做
两个入口,按需选:
Caddyfile:给人看的简易格式,日常使用足够。
原生 JSON 配置加 JSON API:可以动态改配置,适合程序化管理。不喜欢直接写 JSON 的话,还有 config adapters 支持其他格式转换。
这个双轨设计是 Caddy 和多数服务器不同的地方:小项目用 Caddyfile 几行搞定,大规模部署用 JSON API 做自动化,不用换工具。
和 Nginx 的差别
我觉得核心区别在默认值。Nginx 给你一个 HTTP 服务器,HTTPS、HTTP/2、HTTP/3 都要自己配;Caddy 装好就是生产可用的状态。再加上 Go 的内存安全保证,比 C 写的服务器少一整类缓冲区溢出漏洞。
代价也得说清楚:追求极限吞吐的调优场景,Nginx 仍然占优;中文资料也少一些。
几个坑
- 默认会绑定 80/443 这类低端端口,系统有要求的话需要自行授权,README 里提到了这一点
- 自动 HTTPS 依赖 ACME 验证,域名得解析到你的服务器。纯本地测试要么靠内置本地 CA,要么关掉自动 HTTPS
- README 只是概览,Caddyfile 语法和详细安装方式都在 caddyserver.com/docs
我的结论
搭个人站点、API 服务、内网服务,不想碰证书续期和 HTTP/3 配置这些事,Caddy 是成本最低的方案之一。已经在用 Nginx 且没有证书痛点的团队,不必急着迁移。