Caddy 是一个用于替代 Nginx 的 Web 代理服务器,使用 Go 语言编写,部署简单,没有复杂的配置文件,同时具备很多有意思的功能如:Automatic https、http/2、IPv6 等。

caddy2-logo

因为 Caddy 简单易于部署,你可以很轻松的将它用在:自建网盘(Nextcloud)、密码管理器(Bitwarden)、博客(WordPress)、Docker 程序反向代理等各类应用上,程序派就是使用 Caddy 作为网页服务器,部署的这个站点。

初识 Caddy2

从不屑到爱上它只需要真正使用它一次。虽然性能不如 Nginx,但 Caddy 胜在简单便捷。(Caddy v1 自 2020 年起停止维护,这里就不多赘述了,文章都是 Caddy2 相关的内容)

那么用 Caddy 搭建一个网页服务有多简单呢?你只需要写这样一个配置:

1
2
3
4
example.com {
root * /www/html/example.com
file_server
}

只需要在 Caddyfile 里,写入以上四行,一个绑定域名、使用 https 协议的站点就运行了。不需要去申请 SSL 证书,Caddy 已经给你搞定了一切(注册以及续期 Let’s Encrypt 的免费证书。而使用 Nginx 的话,还是需要每 3 个月续期一次,一旦忘记续期导致证书失效,SEO 就裂开了)

CentOS 安装 Caddy

在 CentOS 上安装 Caddy 还是比较简单的,常见的方法有两种:

  1. 使用 yum install caddy 指令直接安装
  2. 使用官方提供的二进制静态程序包,直接运行

使用静态程序包运行,需要在 Release 里找适合自己 VPS 服务器 & 核心的包,并在下载完成后配置服务:配置 Caddy 服务。总体来说非常的繁琐,适合有一定运维经验的同学,本文就不展开介绍了。

而使用 CentOS 的 yum 指令安装 caddy,就不需要自己去配置服务。只需要在安装完成后,找到 Caddyfile 敲入配置,或者直接使用 caddy 指令运行程序。

注意:直接使用 yum install caddy 安装的是 Caddy v1

CentOS 7 安装 Caddy

在 CentOS 7 安装 COPR 仓库,只需要安装 yum-plugin-copr 即可,按照顺序键入以下三行指令:

1
2
3
yum install yum-plugin-copr -y
yum copr enable @caddy/caddy
yum install caddy -y

安装完成以后,键入:caddy version 即可检查是否成功安装 Caddy:

1
2
[git@VM-4-5-centos ~]$ caddy version
v2.6.2 h1:wKoFIxpmOJLGl3QXoo6PNbYvGW4xLEgo32GPBEjWL8o=

有返回结果,并且 version 是 v2.x 即表示安装成功了。

CentOS 8 安装 Caddy

CentOS 8 安装 COPR 的指令和 7 不同,需要将 yum-plugin-copr 改为 dnf-command(copr) ,按照顺序键入以下三行指令:

1
2
3
yum install 'dnf-command(copr)' -y
yum copr enable @caddy/caddy
yum install caddy -y

安装完成以后,键入:caddy version 即可检查是否成功安装 Caddy:

1
2
[git@VM-4-5-centos ~]$ caddy version
v2.6.2 h1:wKoFIxpmOJLGl3QXoo6PNbYvGW4xLEgo32GPBEjWL8o=

有返回结果,并且 version 是 v2.x 即表示安装成功了。

使用 Caddy 创建一个服务器配置

如果你使用的是上述方式安装 Caddy,那么你可以在 /etc/caddy 这个文件夹中找到一个名为 Caddyfile 的文件,它就是 Caddy 使用的核心配置文件。

使用 vim 打开 Caddyfile 配置文件:

1
vim /etc/caddy/Caddyfile

并在里面键入以下内容:

1
2
3
4
:80 {
root * /usr/share/caddy
file_server
}

上述配置即表示,在此当前服务器的 80 端口上建立一个站点,根目录位于 /usr/share/caddy 文件夹,启用静态资源服务器(即访问网页文件资源)。

文件保存后,使用以下指令启动 Caddy

1
systemctl start caddy

然后访问你的域名,就能打开 Caddy 安装完成后,自带的默认站点了。

Caddy 的基础默认站点

在这个页面里,它告诉你 Caddy 已经准备好给你的站点启用 HTTPS 服务,你只需要:

  1. 将域名 DNS 解析指向此服务器
  2. 将站点放入服务器,这里建议的是 /var/www/html 文件夹
  3. 修改 Caddyfile 文件,将 :80 更换为你的域名
  4. 将 Caddyfile 中 root 指向的目录修改为 /var/www/html 文件夹
  5. 重启 Caddy 服务

上述核心,主要是将 :80 更改为具体的域名,只要有具体的域名指向此服务,Caddy 就可以自行申请 SSL 证书。

重启 Caddy 服务,只需要键入这条命令:

1
systemctl reload caddy

在命令执行完成以后,访问域名即可打开你的网站,而且它已经默认启用了 HTTPS 服务,不需要自己去申请和维护 SSL 证书。

Nginx 转 Caddy 常用的配置

使用 Caddy 肯定是打算用来访问服务器内的资源的,常见的如博客站、工具站、程序反向代理等,这里整理了一些 Caddy2 使用的配置。

Caddy2 部署静态网页服务

静态网页服务,只需要启用 file_server 即可,如果资源较大,可以再启用 gzip 压缩,配置文件如下:

1
2
3
4
5
example.com, www.example.com {
root * /var/www/html
encode gzip
file_server
}

这个配置同时监听 example.com 和 www.example.com 两个域名进来的请求,并且开启了 gzip 压缩

Caddy2 部署 WordPress

配置里使用到了 php_fastcgi,使用时需要将 /run/php/php8.0-fpm.sock 替换为服务器里 php-fpm 的路径

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
example.com, www.example {
root * /var/www/wordpress
php_fastcgi unix//run/php/php8.0-fpm.sock

encode gzip
file_server

@disallowed {
path /xmlrpc.php
path *.sql
path /wp-content/uploads/*.php
}

rewrite @disallowed '/index.php'
}

重启 Caddy 后,只要 wordpress 的配置没有出错,访问域名应该就会看到配置 WordPress 的界面了。

Caddy2 部署 Bitwarden

配置 Bitwarden 只需要将请求反向代理到 Docker Bitwarden 程序中配置的端口即可

1
2
3
4
5
example.com {  
reverse_proxy 127.0.0.1:8880
reverse_proxy /notifications/hub 127.0.0.1:3012
reverse_proxy /notifications/hub/negotiate 127.0.0.1:8880
}

由于 Bitwarden 要求必须使用 HTTPS,使用 Caddy 部署比 Nginx 要方便特别多。

Caddy2 部署前端程序

部署前端程序的方式,和部署静态网页是一致的,只需要配置一些前端接口的转发规则即可。

1
2
3
4
5
6
7
8
9
example.com {
handle /api/* {
uri strip_prefix /api
reverse_proxy * 127.0.0.1:3000
}

root * /var/www/html
file_server
}

这样配置一下,即可将带有 /api 前缀的请求,转发到本机 3000 端口的程序上了。

参考链接

编写本文的配置文件,参考了官网的资料以及一些其他前辈的分享,有兴趣的可以去看看原文: