Caddy 是一个用于替代 Nginx 的 Web 代理服务器,使用 Go 语言编写,部署简单,没有复杂的配置文件,同时具备很多有意思的功能如:Automatic https、http/2、IPv6 等。
因为 Caddy 简单易于部署,你可以很轻松的将它用在:自建网盘(Nextcloud)、密码管理器(Bitwarden)、博客(WordPress)、Docker 程序反向代理等各类应用上,程序派就是使用 Caddy 作为网页服务器,部署的这个站点。
初识 Caddy2
从不屑到爱上它只需要真正使用它一次。虽然性能不如 Nginx,但 Caddy 胜在简单便捷。(Caddy v1 自 2020 年起停止维护,这里就不多赘述了,文章都是 Caddy2 相关的内容)
那么用 Caddy 搭建一个网页服务有多简单呢?你只需要写这样一个配置:
1 | example.com { |
只需要在 Caddyfile 里,写入以上四行,一个绑定域名、使用 https 协议的站点就运行了。不需要去申请 SSL 证书,Caddy 已经给你搞定了一切(注册以及续期 Let’s Encrypt 的免费证书。而使用 Nginx 的话,还是需要每 3 个月续期一次,一旦忘记续期导致证书失效,SEO 就裂开了)
CentOS 安装 Caddy
在 CentOS 上安装 Caddy 还是比较简单的,常见的方法有两种:
- 使用 yum install caddy 指令直接安装
- 使用官方提供的二进制静态程序包,直接运行
使用静态程序包运行,需要在 Release 里找适合自己 VPS 服务器 & 核心的包,并在下载完成后配置服务:配置 Caddy 服务。总体来说非常的繁琐,适合有一定运维经验的同学,本文就不展开介绍了。
而使用 CentOS 的 yum 指令安装 caddy,就不需要自己去配置服务。只需要在安装完成后,找到 Caddyfile 敲入配置,或者直接使用 caddy 指令运行程序。
注意:直接使用 yum install caddy 安装的是 Caddy v1
CentOS 7 安装 Caddy
在 CentOS 7 安装 COPR 仓库,只需要安装 yum-plugin-copr 即可,按照顺序键入以下三行指令:
1 | yum install yum-plugin-copr -y |
安装完成以后,键入:caddy version 即可检查是否成功安装 Caddy:
1 | [git@VM-4-5-centos ~]$ caddy version |
有返回结果,并且 version 是 v2.x 即表示安装成功了。
CentOS 8 安装 Caddy
CentOS 8 安装 COPR 的指令和 7 不同,需要将 yum-plugin-copr 改为 dnf-command(copr) ,按照顺序键入以下三行指令:
1 | yum install 'dnf-command(copr)' -y |
安装完成以后,键入:caddy version 即可检查是否成功安装 Caddy:
1 | [git@VM-4-5-centos ~]$ caddy version |
有返回结果,并且 version 是 v2.x 即表示安装成功了。
使用 Caddy 创建一个服务器配置
如果你使用的是上述方式安装 Caddy,那么你可以在 /etc/caddy 这个文件夹中找到一个名为 Caddyfile 的文件,它就是 Caddy 使用的核心配置文件。
使用 vim 打开 Caddyfile 配置文件:
1 | vim /etc/caddy/Caddyfile |
并在里面键入以下内容:
1 | :80 { |
上述配置即表示,在此当前服务器的 80 端口上建立一个站点,根目录位于 /usr/share/caddy 文件夹,启用静态资源服务器(即访问网页文件资源)。
文件保存后,使用以下指令启动 Caddy
1 | systemctl start caddy |
然后访问你的域名,就能打开 Caddy 安装完成后,自带的默认站点了。
在这个页面里,它告诉你 Caddy 已经准备好给你的站点启用 HTTPS 服务,你只需要:
- 将域名 DNS 解析指向此服务器
- 将站点放入服务器,这里建议的是 /var/www/html 文件夹
- 修改 Caddyfile 文件,将 :80 更换为你的域名
- 将 Caddyfile 中 root 指向的目录修改为 /var/www/html 文件夹
- 重启 Caddy 服务
上述核心,主要是将 :80 更改为具体的域名,只要有具体的域名指向此服务,Caddy 就可以自行申请 SSL 证书。
重启 Caddy 服务,只需要键入这条命令:
1 | systemctl reload caddy |
在命令执行完成以后,访问域名即可打开你的网站,而且它已经默认启用了 HTTPS 服务,不需要自己去申请和维护 SSL 证书。
Nginx 转 Caddy 常用的配置
使用 Caddy 肯定是打算用来访问服务器内的资源的,常见的如博客站、工具站、程序反向代理等,这里整理了一些 Caddy2 使用的配置。
Caddy2 部署静态网页服务
静态网页服务,只需要启用 file_server 即可,如果资源较大,可以再启用 gzip 压缩,配置文件如下:
1 | example.com, www.example.com { |
这个配置同时监听 example.com 和 www.example.com 两个域名进来的请求,并且开启了 gzip 压缩
Caddy2 部署 WordPress
配置里使用到了 php_fastcgi,使用时需要将 /run/php/php8.0-fpm.sock 替换为服务器里 php-fpm 的路径
1 | example.com, www.example { |
重启 Caddy 后,只要 wordpress 的配置没有出错,访问域名应该就会看到配置 WordPress 的界面了。
Caddy2 部署 Bitwarden
配置 Bitwarden 只需要将请求反向代理到 Docker Bitwarden 程序中配置的端口即可
1 | example.com { |
由于 Bitwarden 要求必须使用 HTTPS,使用 Caddy 部署比 Nginx 要方便特别多。
Caddy2 部署前端程序
部署前端程序的方式,和部署静态网页是一致的,只需要配置一些前端接口的转发规则即可。
1 | example.com { |
这样配置一下,即可将带有 /api 前缀的请求,转发到本机 3000 端口的程序上了。
参考链接
编写本文的配置文件,参考了官网的资料以及一些其他前辈的分享,有兴趣的可以去看看原文: