前言
我们通常在部署 web 服务的时候往往会选择 nginx 作为最前面的一个狠角色,它的性能和能力大家也是有目共睹的,反向代理负载均衡等等。而作为后起之秀 caddy 却不被人所熟知,不过渐渐的也开始展露头角。
今天我就来介绍这个 caddy ,为什么我会称它有可能成为下一个 nginx。
我先列举几个痛点你看下:
- nginx 的配置文件你是否感觉有时候有点臃肿
- https 需要购买或者申请证书,然后配置是否觉得麻烦?
- linux 下安装 nginx 需要部分依赖
而 caddy 确实给我了一种眼前一亮的感觉。
使用
安装
https://caddyserver.com/docs/download
安装很简单,直接下载对应的二进制文件即可,或者按照对应到操作系统去安装也可以。没有其他依赖。
使用
https://caddyserver.com/docs/getting-started
一个命令就可以启动,caddy,默认会去当前目录下寻找 Caddyfile
配置文件,也可以通过 --config 去指定文件位置
caddy start
caddy stop
caddy reload
反向代理
https://caddyserver.com/docs/caddyfile/directives/reverse_proxy
https://www.xxxx.com {
reverse_proxy /api/user* {
to 192.168.1.101:9000
}
}
静态文件
https://www.xxxx.com {
root * /home/linkinstar/www
file_server
}
外网服务使用 https
https://caddyserver.com/docs/quick-starts/https
https://caddyserver.com/docs/automatic-https
caddy 最让我惊讶的是自动的 https 功能,只要你有一个可以正常访问的域名,将域名指向你外网服务器对应的 ip,然后向上面一样配置好 Caddyfile,只要域名一致,https 就完成了,不需要你额外申请证书,不需要做其他任何的操作,真的很棒👍,可谓是懒人必备
原理是,它会去 https://letsencrypt.org/ 调用对应的接口去申请证书,这是一个免费证书的申请网站,
本地使用 https 证书
当我们的一些内网服务器需要使用 https 证书的时候,怎么办呢?因为内网的服务器没有公网 IP,caddy 去 letsencrypt 申请证书的时候无法验证,所以需要曲线救国。前提你需要一个域名。https://zhuanlan.zhihu.com/p/63412372
申请证书
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
certbot-auto --manual --preferred-challenges dns certonly
接下来根据提示依次输入域名,和一些提示,一般输入y表示同意即可,知道让你去添加一条 txt 解析记录并验证的时候
将证书输出验证内容进行 dns 解析配置
配置完成之后会在 /etc/letsencrypt/live/xxx.com 目录下生成对应的公钥私钥
配置Caddyfile
xxx.com:443 {
tls /etc/letsencrypt/live/xxx.com/cert.pem /etc/letsencrypt/live/xxx.com/privkey.pem
}
性能比较
https://caddy.community/t/siege-benchmarks-nginx-vs-caddy-identical-systems/2962
从性能上来说,确实 nginx 要更胜一筹,而且官方也承认(毕竟 nginx 的设计就是干这个的)
不过从比较的数据上来说,能让普通用户使用很满意了,并没有一定需要追求极致的性能体验,毕竟免费的 https 已经有点香了
总结
优点
- caddy 发挥了 go 传统的优势安装没有依赖,使用方便
- 自动化的 https 证书的申请,很让人舒服
- 配置项更加清晰和简单,一目了然
缺点
- 性能比 nginx 略逊一筹
- 重启的时候 https 会重新申请,会有短暂的停顿
- 使用案例少了一些
总的来说,如果你正需要一个免费方便的 https 的网关,那就试试 caddy 吧,一定不会让你失望的,而 caddy 也慢慢在发展,虽然从设计角度讲模型可能不如 nginx,但是从使用角度讲,可能我后续更偏爱 caddy 一些