Caddy 是一个用 Go 实现的 Web Server。
在追求性能的道路上,nginx 已经一骑绝尘。这种情况下诞生的 Caddy 有什么特性呢?
Caddy 的作者 Matt Holt 有这样的理念:其他 Web Server 为 Web 而设计,Caddy 为 human 设计。一句话就是 Caddy 主打易用性,使用配置简单。
Caddy 有下面这些开箱即用的特性:
“几乎所有的功能在 Caddy 里的都是插件,HTTP 服务器是插件,高级的 TLS 特性也是插件,每一行命令实现的功能都是一个插件”
CADDY_TELEMETRY=on curl https://getcaddy.com | bash -s personal
显示如下内容 caddy 已经安装成功
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 7380 100 7380 0 0 6897 0 0:00:01 0:00:01 --:--:-- 6897
Downloading Caddy for linux/amd64 (personal license)...
Download verification OK
Extracting...
Putting caddy in /usr/local/bin (may require password)
Caddy v1.0.3 (h1:i9gRhBgvc5ifchwWtSe7pDpsdS9+Q0Rw9oYQmYUTw1w=)
Successfully installed
sudo mkdir -p /etc/caddy # 配置文件夹
sudo touch /etc/caddy/Caddyfile
Caddyfile
写入以下内容,格式还是比较简单的
example.com:80
gzip
log /var/log/caddy/access.log
root /var/www
tls [email protected]
首先第一行必须是网站的地址
第 2 行的 gzip
是一个指令,表示打开 gzip 压缩功能,这样网站在传输网页时降低流量
第 3 行的 log
指令会为网站开启 log 功能,log 后的参数是 log 文件的存放位置
第 4 行的 root
是指定网站的根目录
第 5 行的 tls
指令告诉 caddy 为网站开启 https 并自动申请证书,后面的 email 参数是告知 CA 申请人的邮箱。caddy 会默认使用 let's encrypt 申请证书并续约。
tls 也可以使用路径给出的证书 tls /etc/ssl/cert.pem /etc/ssl/key.pem
如何设置多站点访问呢?
example.com:80 {
gzip
log /var/log/caddy/access.log
root /var/www
tls /etc/ssl/cert.pem /etc/ssl/key.pem
}
example2.com:3000{
gzip
log /var/log/caddy/example2/access.log
root /var/www/example2
tls /etc/ssl/example2/cert.pem /etc/ssl/example2/key.pem
}
基本的 caddy 配置就这些,详细的内容可以去官网上看文档学习
http://www.example.com {
## HTTP 代理配置
### 此时访问 example.com,实际访问的是 127.0.0.1:8080/app/ 的内容
proxy / 127.0.0.1:8080/app/
## WebSocket 代理配置
### 客户端请求的 wss://example.com/app/websocket, 实际为 wss://127.0.0.1:8080/app/websocket
proxy /app/websocket 127.0.0.1:8080 {
websocket
}
}
proxy / web1.local:80 web2.local:90 web3.local:100 {
policy round_robin
}
用反向代理命令proxy
将请求循环转发到 80、90、100 三个后端服务,通过 policy 命令控制策略为 round_robin
,以循环方式选择后端服务。
有 3 种
nohup caddy &
下载 hook.service 插件
systemd
使用的是官方提供的脚本 caddy.service,其他系统也可以在这里找到相应的脚本。
把这个文件下载到 /etc/systemd/system/
sudo curl -s https://raw.githubusercontent.com/caddyserver/caddy/v1.0.3/dist/init/linux-systemd/caddy.service -o /etc/systemd/system/caddy.service
需要重新加载 systemd daemon,让配置生效, sudo systemctl daemon-reload
。
设置 Caddy 开机启动
sudo systemctl enable caddy.service