Back

Caddy

这段时间被 @Jimbo 逼叨着在各个博客平台之间来回切换,从之前的 Ghost 换到 WordPress,现在有换成了 Hexo。在这期间,我发现了一个非常好用的 HTTP 服务器 —— Caddy,可以用来替换 Nginx。

Caddy 是一个用 Go 语言编写的 HTTP 服务器,两点在于配置文件非常简洁、人性化,支持最新的 HTTP/2,有多种扩展,并且会自动申请并配置 Let’s Encrypt 的证书,基本开箱即用。他的性能相对于 Nginx 稍微逊色一点,但是比 Apache 要好很多,我等小网站绝对够用。

如何使用


创建 Caddyfile

Caddyfile 就是 Caddy 的配置文件,类似于httpd.conf 或者 nginx.conf。**默认情况下,Caddy 会在当前目录搜索名为“Caddyfile”的文件作为配置文件。**当然,你也可以为它任意命名并放在任意目录,只要使用caddy -conf="/path/to/Caddyfile"

Caddyfile 语法

用 Caddy 创建一个静态网站,只要两三行语句:

mysite.com {
    root /www/mysite.com
}

如果使用的是类似 WordPress 之类需要 fastcgi 代理的网站,只要一句fastcgi /blog/ 127.0.0.1:9000 php即可。

自动配置 HTTPS

当配置文件中是具体域名而不是 IP 地址或 localhost、端口为 80、没有手动配置 SSL Certificate 和 Key 时,Caddy 就会在初次运行时自动为你在 Caddyfile 文件中出现的域名申请 Let’s Encrypt 证书并配置好。除此之外 Caddy 还会定期检查证书并自动续期。

这里提醒一下,Caddy 默认没有开启 HSTS,可以在 Caddyfile 中添加header / Strict-Transport-Security: max-age=63072000; includeSubDomains; preload来开启 HSTS 和 preload。

启动 Caddy

caddy

Caddy 的扩展


Caddy 有不少有意思的扩展,在下载页面会让你选择你需要的扩展。我自己使用了两个扩展,一个是git,另一个是filemanager。这里说一下,Caddy 的扩展是编译进二进制文件中的,只能在下载之前选择好然后编译,以后想要更改必须重新去官方的下载页面选择、编译、下载。

git

这是扩展能够定时把指定的 git 仓库 clone 到服务器。目前博客是在本地写好文章,用 Hexo 生成静态网站,然后把生成的文件用 git push 到 Gitlab,运行在 VPS 上的 Caddy 会每隔半小时检查一次是否有新内容并更新服务器上的文件。这里会出现延迟,但我觉得并不是很重要,当然这个间隔时间是可以自己更改的。

Filemanager

这个扩展我是用来搭建一个下载站,有时家里的网络下载很慢的东西我会先用 VPS 下载,然后再从 VPS 上下载到本地。这个扩展提供了一个很好用的前端,能够管理文件,执行命令行命令,还能实现简单的多用户和权限管理。

选择 Caddy 的另一个原因


上一篇文章说了在 Nginx 上开启 HTTP/2,最近又发生了一些事情导致 Chrome 上有可能降级使用 HTTP/1.1,具体内容可以看这篇文章,要想开启稍微有点麻烦,而 Caddy 并没有什么这个麻烦。总的来说,Caddy 是面向人类开发。

Licenced under CC BY-NC-SA 4.0