Caddy:Nginx 这么成熟,为什么还有人用 Go 重写一个开源 Web Server?
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
如果现在让你在 Linux 上部署一个 Web 服务,大多数人的第一反应还是 Nginx。 这很正常。 Nginx足够成熟,性能也没什么好怀疑的。反向代理、静态文件、负载均衡、HTTPS,基本什么都能干。 所以第一次看到 Caddy 时,我其实也有一个疑问:
而且 Caddy 还是 Go 写的。 后来真正用过以后,我觉得 Caddy 有意思的地方,并不是"Go 写的,所以比Nginx 更先进"。 它真正重新考虑的是另外一个问题:
这篇就来聊聊 Caddy。 1. Caddy 到底是什么?简单来说,Caddy 就是一个使用 Go 编写的现代 Web Server。 它可以做:
比如最常见的反向代理:
如果只是看这个功能,其实没什么特别的。 Nginx 一样能做。 Caddy 真正让我觉得舒服的,是后面的事情它也顺手帮你做了。 比如 HTTPS。 2. Caddy 最出名的能力:自动 HTTPS以前部署 HTTPS,一般是:
然后还要考虑:
这套方案已经非常成熟,也没什么问题。 但 Caddy 的想法更直接:
所以你只需要:
只要域名、DNS、80/443 端口这些条件正常,Caddy 就会自动处理证书。 整个过程变成:
证书续期也是自动的。 这其实就是 Caddy 和很多传统 Web Server 最大的思路差异之一:
3. Caddyfile 为什么这么简单?再看一个稍微完整一点的例子。 前端:
后端:
一个典型的:
基本几行配置就结束了。 如果项目不复杂,我个人其实挺喜欢这种方式。 配置短,能看懂,也没太多魔法。 Caddyfile 的设计目标本来就不是把所有底层细节暴露出来,而是尽量描述:
4. 但 Caddyfile 其实不是它真正的配置格式这里有一个挺有意思的设计。 Caddy 真正的原生配置其实是: Caddyfile 更像是给人写的配置语言。 流程大概是:
为什么这么设计? 因为: 适合人维护。 而: 更适合程序生成和修改。 这就引出了 Caddy 另外一个我觉得比较有意思的地方。 5. Caddy 不只是读配置文件,它还有 Admin API传统 Web Server 的配置方式通常是:
Caddy 当然也能这么用。 但它同时提供 Admin API。 也就是说:
你可以让其他程序去动态修改:
这时候 Caddy 就不只是一个"读配置文件启动"的 Web Server 了。 它开始有一点: 的感觉。 如果以后要做自己的运维平台、网关管理程序或者动态路由系统,这种设计就很有价值。 6. 为什么这种设计很适合现在的基础设施?以前服务器变化不大:
改一次 Nginx 配置,可能几个月都不用动。 但现在越来越多系统变成:
配置不一定来自人。 也可能来自:
所以 Caddy 的:
其实很符合现在这种基础设施越来越动态的方向。 不过有一点要注意。 Admin API 权限很高,生产环境不要随便暴露到公网。 这个和数据库管理端口一个道理。 7. Caddy 和 Traefik 有什么区别?前面我们刚写过 Traefik。 它们有不少共同点:
但两者的重心还是不太一样。 Traefik 最有代表性的设计是: 它特别擅长从:
这些基础设施里自动发现服务。 所以我更愿意把 Traefik 理解成:
而 Caddy 更像:
简单粗暴一点:
当然,这不是绝对边界。 只是选型时可以先这么理解。 8. 为什么 Caddy 要用 Go?这个问题其实很容易被带偏。 有人会直接变成:
我觉得没太大必要。 Caddy 选择 Go 真正明显的收益,是工程层面的:
比如一个 Caddy: 拷过去基本就能运行。 Linux、macOS、Windows、Container 都比较自然。 所以:
这两件事区别还是挺大的。 9. Caddy 的模块化也很有 Go 味道Caddy 2 的核心是高度模块化的。 很多能力都可以扩展:
整体可以理解成:
核心负责框架。 具体能力通过模块扩展。 这种:
的设计,对 Go 开发者应该很熟悉。 10. Caddy 适不适合 Go Web 项目?我觉得挺适合。 例如一个很普通的项目:
Caddy 可以负责:
Go 服务就专心写业务。 如果只有一两台服务器,又没有复杂网关需求,我甚至觉得这种方案比一上来Kubernetes + Ingress 简单太多。 能解决问题就行。 完全没必要为了"云原生"把简单项目搞复杂。 11. 什么情况下我还是会选 Nginx 或 Traefik?如果是成熟传统服务器环境: 依然很稳。 如果大量使用:
那我会优先看看: 如果是:
我会很愿意用: 简单总结: 场景 我更倾向 成熟传统 Web 基础设施 Nginx Docker / Kubernetes 动态网关 Traefik 单机 / VM / 中小型 Web Caddy 自动 HTTPS 优先 Caddy 已有大量 Nginx 配置资产 Nginx 没有谁一定替代谁。 场景不同而已。 12. Caddy 有没有缺点?当然有。 首先,生态和历史积累肯定没法和 Nginx 比。 遇到一个非常偏门的问题: 大概率搜一下就有人踩过。 Caddy 的资料量还是少一些。 其次,如果项目高度依赖:
那迁移 Caddy 基本没什么必要。 另外 Caddy 自动化程度比较高。 好用的时候很舒服。 但出了问题,你还是得懂:
所以自动 HTTPS 并不意味着:
只是不用每次重复配置而已。 总结Caddy 从来都不是:
如果只是这么理解,其实就把它看小了。 它真正重新设计的是:
Caddy 给出的答案大概是:
Nginx 依然成熟,也依然值得用。 但成熟并不意味着没有重新设计的空间。 如果是大型公司,已经有完整 Nginx 运维体系,我不会为了用 Caddy 而用Caddy。 但如果是一个新的中小型 Go Web 项目,几台服务器,需要HTTPS、静态文件和反向代理,我现在反而会很愿意先试试 Caddy。 原因也很简单:
Caddy 最吸引我的地方,其实也就是这一点。 没有想取代谁。 只是把很多以前需要手工处理的事情,变成了默认能力。 阅读原文:原文链接 该文章在 2026/10/20 11:45:48 编辑过 |
关键字查询
相关文章
正在查询... |