Caddy最革命性的特点是全球首个默认启用HTTPS的Web服务器。传统服务器需要复杂配置的SSL证书,而Caddy只需两行配置:yourdomain.com respond"Hello HTTPS!"
Caddy是一个Go编写的Web服务器,类似于Nginx,Caddy提供了更加强大的功能,相较于Nginx来说使用Caddy有如下优势:
- 自动的HTTPS证书申请
- 自动证书续期以及OCSP stapling等
- 更高的安全性包括但不限于TLS配置以及内存安全等
- 友好且强大的配置文件支持
- 支持API动态调整配置
- 支持HTTP3(QUIC)
- 支持动态后端,例如连接Consul、作为k8s ingress等
- 后端多种负载策略以及健康检测等
- 本身Go编写,高度模块化的系统方便扩展
启动后,Caddy自动完成:
- 通过ACME协议(默认使用
Let’s Encrypt
)申请证书 - 自动配置HTTPS并监听443端口
- 将HTTP请求重定向至HTTPS
- 后台自动续期证书,无需人工干预
这一特性让个人博客、中小型站点彻底告别证书管理烦恼。
极简设计与强大功能
如果在 Linux 服务器上使用的话,platform 选择 Linux 64-bit 就可以了,plugins 如果暂时不需要的话,可以不选。然后点击下面的 DOWNLOAD 按钮,就下载到 caddy 了。同理,解压之后用 cp 命令放到 /usr/local/bin/caddy 就完成了安装。
与臃肿的传统服务器不同,Caddy采用单一静态二进制文件,无任何依赖(甚至不依赖libc),安装只需3步:wget https://github.com/caddyserver/caddy/releases/latest/download/caddy_linux_amd64 chmod +x caddy_linux_amd64 mv caddy_linux_amd64 /usr/bin/caddy
实际上是下载好了已编译的二进制文件,无需再次编译
但其能力却毫不缩水:
- 原生支持HTTP/1.1、HTTP/2及实验性HTTP/3
- 反向代理与负载均衡(含WebSocket)
- 静态文件服务(隐藏.git等敏感文件)
- Markdown实时渲染
- IPv4/IPv6双栈支持
- 内置BASIC认证、Gzip压缩等中间件
安全
采用Go语言编写带来内存安全优势,天然免疫Heartbleed
、DROWN
等经典漏洞。其默认加密套件为ECDHE ECDSA + AES256-GCM-SHA384
,支持TLS 1.3,并通过TLS_FALLBACK_SCSV
防御协议降级攻击
为何Caddy是未来之选?
- 开发体验革命:告别Nginx的繁琐配置,一条命令启动服务
- 安全默认值:HTTPS即正义,Caddy将其变为现实
- 云原生友好:单一二进制+无依赖,完美适配Docker(
docker pull caddy
) - 扩展自由:Go模块化架构允许自定义中间件开发
- 性能可靠:经受数万亿请求验证,可扩展至数十万站点
JSON | Caddyfile |
完整的Caddy功能 | 最常见的Caddy功能部件 |
易于生成 | 易于手工制作 |
易于编程 | 难以自动化 |
非常有表现力 | 适度的表达 |
允许配置遍历 | 不能在Caddyfile间转换 |
部分配置更改 | 只能修改整个配置 |
可以导出 | 无法导出 |
与所有API端点兼容 | 与某些API端点兼容 |
自动生成的文档 | 文档是手写的 |
无处不在 | 小众 |
更有效率 | 更多的计算 |
有点无聊 | 挺有意思的 |
API | 配置文件 |
使用HTTP请求修改配置 | 使用Shell命令修改配置 |
易于扩大规模 | 难以规模化 |
手工操作难度大 | 易于手工操作 |
真的很有趣 | 也很有趣 |
安装方法
1、预编译安装:
2、脚本安装curl -s https://getcaddy.com | bash
3.1、源码编译安装Go,Go build
3.2、源码编译安装xCaddy,官方推荐,xCaddy bulid
配置功能
序号 | 功能 | 备注 |
1 | Gzip | Gzip压缩 |
2 | log | 日志 |
3 | redir | 重定向 |
4 | header | Access-Control-Allow-Origin Access-Control-Allow-Methods 支持 javascript 跨域访问 |
5 | fastcgi | 把请求通过 fastcgi 传给 php,ruby 等后端程序 |
6 | rewrite | 服务器内部重定向 |
7 | to node1:80 node2:80 node3:80 | lb_policy first:各种策略 |
8 | 多 HOST 网站 | 只需要在域名后面跟一个花括号扩起来就可以了 |
Caddy目前不支持 DigiCert 证书。它默认使用 Let’s Encrypt 免费证书实现自动HTTPS,但未提供对其他证书颁发机构(如DigiCert)的直接支持。 若需使用DigiCert证书,可考虑以下方案:
- 手动配置SSL证书:通过传统方式导入DigiCert证书文件至Caddy配置中。
- 更换服务器软件:选择支持DigiCert的 Apache 、 Nginx 等服务器软件。
对于程序员来说,麻烦的永远不是写配置文件或者部署流程,而是出现bug找不到足够多的资料来debug,nginx什么样的服务都有充足的案例,你遇到的问题永远不可能是新的问题,这种情况谁愿意为了个ssl这种无关痛痒的东西去换技术线[笑哭]你说它效率吊打nginx的话倒是有研究的必要。
go主要是写的快,并不是跑得快。
结论:我认为 Caddy 是非常适合 Web 开发者或初学者的 Web 服务器。但如果你开始搭建负载均衡和反向代理,说明你已经有一定流量,应开始考虑架构优化并深入学习 Web 服务器和代理。此时,Nginx 提供更高吞吐量和更低延迟,运行成本更低。因此,与其使用 Caddy,不如选择 Nginx 或其他更高效的代理。