INFO
Categories

Caddy测试及畅想

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语言编写带来内存安全优势,天然免疫HeartbleedDROWN等经典漏洞。其默认加密套件为ECDHE ECDSA + AES256-GCM-SHA384,支持TLS 1.3,并通过TLS_FALLBACK_SCSV防御协议降级攻击

为何Caddy是未来之选?

  • 开发体验革命:告别Nginx的繁琐配置,一条命令启动服务
  • 安全默认值:HTTPS即正义,Caddy将其变为现实
  • 云原生友好:单一二进制+无依赖,完美适配Dockerdocker pull caddy
  • 扩展自由:Go模块化架构允许自定义中间件开发
  • 性能可靠:经受数万亿请求验证,可扩展至数十万站点
JSONCaddyfile
完整的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

配置功能

序号功能备注
1GzipGzip压缩
2log日志
3redir重定向
4headerAccess-Control-Allow-Origin
Access-Control-Allow-Methods
支持 javascript 跨域访问
5fastcgi把请求通过 fastcgi 传给 php,ruby 等后端程序
6rewrite服务器内部重定向
7to node1:80 node2:80 node3:80lb_policy first:各种策略
8多 HOST 网站只需要在域名后面跟一个花括号扩起来就可以了

Caddy目前不支持 DigiCert 证书。它默认使用 Let’s Encrypt 免费证书实现自动HTTPS,但未提供对其他证书颁发机构(如DigiCert)的直接支持。 ‌若需使用DigiCert证书,可考虑以下方案:

  1. 手动配置SSL证书‌:通过传统方式导入DigiCert证书文件至Caddy配置中。
  2. 更换服务器软件‌:选择支持DigiCert的 Apache 、 Nginx 等服务器软件。

对于程序员来说,麻烦的永远不是写配置文件或者部署流程,而是出现bug找不到足够多的资料来debug,nginx什么样的服务都有充足的案例,你遇到的问题永远不可能是新的问题,这种情况谁愿意为了个ssl这种无关痛痒的东西去换技术线[笑哭]你说它效率吊打nginx的话倒是有研究的必要。

go主要是写的快,并不是跑得快。

结论:我认为 Caddy 是非常适合 Web 开发者或初学者的 Web 服务器。但如果你开始搭建负载均衡和反向代理,说明你已经有一定流量,应开始考虑架构优化并深入学习 Web 服务器和代理。此时,Nginx 提供更高吞吐量和更低延迟,运行成本更低。因此,与其使用 Caddy,不如选择 Nginx 或其他更高效的代理。