Caddy 快速实践

Caddy 是一个可以真的非常方便安装、配置以及运行的 web 服务器,相比 Nginx 或者 Apache,Caddy 更适合我们快速搭建 web 服务器,可适合绝大大数项目需求。

本地只用 Caddy

作为开发人员,我更关心开发效率,服务器等环境的部署确实不是擅长的,经常配置一个 Nginx 即使照着教程操作还是会出现各种莫名其妙的问题,或者一段时间后,发现 Nginx 竟然起不起来,网上还是各种不靠谱的 “解决方案”……

相对于 NginxApache,Caddy 简单很多,而且没有任何外部依赖,一个配置文件搞定。这是在开发中最为关注的点:

  • 简单,无需花多余经历
  • 无依赖
  • 反向代理
  • 支持虚拟主机
  • 使用 HTTP/2
  • 自动生成和更新 ssl 证书
  • 支持各平台,安装简单

具体还有哪些特性移步官网文档,Gaddy 还支持插件扩展,github 上也很活跃,前景看好,可以放心使用😉

安装

1
2
# mac
brew install caddy

可以直接从官网下载安装,下载的文件中还有一个 init 文件夹,里边有基本的配置 demo

现在在任意一个目录下新建一个 index.html 文件,运行 caddy

1
2
3
mkdir temp
touch index.html
vim index.html

保存,然后运行 caddy

1
caddy

访问 localhost:2015 你可以看到服务器已经正常启动了

caddy 服务器配置

caddy 可以通过命令行传参也可通过 Caddyfile 进行配置,比如我们指定域名和端口:

1
caddy -host localhost:8000

通过 Caddyfile 配置:

1
2
touch Caddyfile
vim Caddyfile

Caddyfile 文件内容:

1
localhost:8000

Caddyfile 文件

caddy 默认将当前目录下的 Caddyfile 作为配置文件,通过 -conf 指定配置文件路径:

1
caddy -conf ../path/to/Caddyfile

文件格式

Caddyfile 是一个纯文本文件,由 地址指令 组成,看个复杂点的例子:

1
2
3
4
5
6
7
8
9
10
localhost
gzip
tls self_signed # 自签发证书
proxy /api 127.0.0.1:7005 # 反向代理
log /var/log/caddy/access.log
header /api {
Access-Control-Allow-Origin *
Access-Control-Allow-Methods "GET, POST, OPTIONS"
-Server
}

第一行是地址,之后就是指令了,如果一条指令有多个参数需要换行,用 {} 括起来就好,完整指令及解释请查看 文档

多站点配置

如果需要在一个 caddy 服务中启动多个站点,需要在域名后边加上 {},将指令写到 {} 中:

1
2
3
4
5
6
7
8
9
mysite.com {
root /www/mysite.com
}

sub.mysite.com {
root /www/sub.mysite.com
gzip
log ../access.log
}

如果这两个站点有通用的配置:

1
2
3
4
mysite.com, sub.mysite.com {
gzip

}

很简单是吧,另外,Caddyfile 中使用环境变量也是可以的。

Mac 环境配置

先去 下载 .plist 文件,这是 mac 下的定时任务配置文件(未防口误,说明一下,是一个具体事件对应一个 .plist

开机启动

1
2
cp ~/Download/com.caddyserver.web.plist /usr/local/opt/caddy/
ln -sfv /usr/local/opt/caddy/*.plist ~/Library/LaunchAgents

基本配置

1
2
3
4
mkdir -p /usr/local/etc/caddy /usr/local/etc/ssl/caddy /var/log/caddy
touch /usr/local/opt/caddy/Caddyfile
sudo chown -R _www:_www /usr/local/etc/caddy /var/log/caddy
sudo chmod 0750 /usr/local/etc/ssl/caddy

自定义配置文件

修改 Caddyfile

1
sudo vim /usr/local/etc/caddy/Caddyfile
1
2
3
http://localhost {
root /var/www
}

修改 .plist 文件

因为是用 brew 安装,和官网上的配置有所差异,修改 .plist 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>Caddy</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/caddy</string>
<string>-agree</string>
<string>-conf</string>
<string>/usr/local/etc/caddy/Caddyfile</string>
<string>-root</string>
<string>/var/www</string>
</array>
<key>EnvironmentVariables</key>
<dict>
<key>CADDYPATH</key>
<string>/usr/local/etc/ssl/caddy</string>
</dict>

<key>UserName</key>
<string>root</string>
<key>GroupName</key>
<string>wheel</string>
<key>InitGroups</key>
<true/>

<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<dict>
<key>Crashed</key>
<true/>
</dict>

<key>SoftResourceLimits</key>
<dict>
<key>NumberOfFiles</key>
<integer>8192</integer>
</dict>
<key>HardResourceLimits</key>
<dict/>

<key>WorkingDirectory</key>
<string>/usr/local/etc/ssl/caddy</string>

<key>StandardErrorPath</key>
<string>/var/log/caddy/error.log</string>
<key>StandardOutPath</key>
<string>/var/log/caddy/info.log</string>
</dict>
</plist>

启动、停止、重启服务

brew 安装的一个极大便利就是可以直接使用 brew services

1
2
3
4
5
6
7
8
# start
brew services start caddy

# stop
brew services stop caddy

# restart
brew services restart caddy

上线项目还请换回 nginx

caddy 虽然简单,但也还是有自身的问题。

  1. 商业项目需要支付授权
  2. 资源占用多,高并非下表现和nginx还是存在较大差距

    具体可参考:Caddy HTTP/2 server & benchmarks

文章作者: voya
文章链接: http://www.voyax.meposts/e38a6063/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!