📌 项目地址: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 且没有证书痛点的团队,不必急着迁移。

这篇文章对你有帮助吗?

发表回复