0
0

更好用的 Web 服务器:Caddy

Last updated at Posted at 2021-06-02

双 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写入以下内容,格式还是比较简单的

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

如何设置多站点访问呢?

Caddyfile
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 配置就这些,详细的内容可以去官网上看文档学习

反向代理

Caddyfile
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
  }
}

负载均衡简单配置

Caddyfile
proxy / web1.local:80 web2.local:90 web3.local:100 { 
  policy round_robin 
}

用反向代理命令 proxy 将请求循环转发到 80、90、100 三个后端服务,通过 policy 命令控制策略为 round_robin,以循环方式选择后端服务。

已守护进程的方式启动 daemon

有3种

使用的是官方提供的脚本 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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0