双 11 买了一台阿里云vps ,新vps当然要用新工具武装下。
What is Caddy
Caddy 首先是一个用Go实现的Web Server。
在追求性能的道路上,nginx已经一骑绝尘。这种情况下诞生的 Caddy有什么特性呢?
Caddy的作者Matt Holt有这样的理念: 其他Web Server为Web而设计,Caddy为human设计。一句话就是 Caddy主打易用性,使用配置简单。
Caddy有下面这些开箱即用的特性:
- 全自动支持HTTP/2协议,无需任何配置。
- Caddy 使用 Let’s Encrypt 让你的站点全自动变成HTTPS,无需任何配置。
- 合理使用多核多核 得益于go的特性
- 完全支持IPv6环境
- Caddy 对WebSockets有很好的支持
- 自动把Markdown转成 HTML
- Caddy 对log格式的定义很容易
- 易于部署 得益于go的特性,caddy只是一个小小的二进制文件,没有依赖,很好部署
- 得益于Go的跨平台特性,Caddy很容易的支持了三大主流系统:Windows、 Linux、Mac
“几乎所有的功能在Caddy里的都是插件,HTTP服务器是插件,高级的TLS特性也是插件,每一行命令实现的功能都是一个插件”
一键安装 Caddy
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
配置 Caddy
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 tls@outlook.com
首先第一行必须是网站的地址
第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
,以循环方式选择后端服务。
已守护进程的方式启动 daemon
有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
开启 http2
https://sqh.me/tech/quick-start-http2-proxy/
https://makazeu.win/post/caddy/
要申请ssl证书 先挖坑
参考:
https://tonybai.com/2015/06/04/caddy-a-web-server-in-go/
https://github.com/golang/go/wiki/Ubuntu
https://zhuanlan.zhihu.com/p/25815245
https://www.zybuluo.com/zwh8800/note/844776
https://zixizixi.cn/caddyserver-r-proxy-https
https://www.giuem.com/caddy-tutorial-for-debian/
https://github.com/hacdias/caddy-service