Caddy概述
与同样的产品nginx和apache类似,它可以用作web服务,但是相比起nginx和apache,caddy集成了Let’s Encrypt插件,以及可以选择ZeroSSL作为证书提供商,也就是说它会默认给站点配置免费的ssl证书,至于配置难度相比起两外两位老前辈也是方便上了许多
Caddy安装
包管理器安装
对于Debian, Ubuntu, kali等(使用apt作为包管理器的系统):
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
#更新软件源
sudo apt update
sudo apt install caddy
对于CentOS等使用yum作为包管理器:
yum install yum-plugin-copr
yum copr enable @caddy/caddy
yum install caddy
运行如下代码:
systemctl start caddy
打开浏览器访问相应端口看到如下页面即为成功安装:
拉取源文件到本地编译使用
由于caddy项目是由GO语言编写而成,所以可以先把源文件拉取到本地再用go进行构建即可食用,但是要求本地的GO环境≥1.22.3
git clone "https://github.com/caddyserver/caddy.git"
cd caddy/cmd/caddy/
go build
编译成功后会出现一个caddy文件
mv caddy /usr/local/bin/
移动成功过后就可以全局范围内通过caddy命令
使用caddy了
但是当前的caddy的各项配置并不完善,比如网页配置文件Caddyfile之类的
虽然可以直接在任何目录下创建Caddyfile,并在caddyfile的同目录下运行
touch Caddyfile
caddy run
它会自动在当前目录下查找Caddyflie,默认内容为:
:80 {
# 站点根目录
root * /usr/share/caddy
# 启用静态文件服务
file_server
# 设置反向代理到另外的端口:
# reverse_proxy localhost:8080
# 或通过 php-fpm 提供 PHP 站点:
# php_fastcgi localhost:9000
}
同时也可以使用指定Caddyfile的文件路径的方法运行Caddy,就可以将Caddyfile任意存放
caddy run --config /path/to/Caddyfile
但是这边还是推荐将其放到/etc
配置中,因为/etc
目录本就是用于存放系统配置文件的,而且下一步配置systemd服务文件也需要固定的配置文件路径(可选)
touch Caddyfile
mv ./Caddyfile /etc/caddy/
#将已经在其它地方创建好的caddyfile移动至/etc/caddy目录
此时基础的环境基本完善,后续为可选操作
配置systemd服务文件,以便通过systemctl
系列命令进行启动和管理
vim /etc/systemd/system/caddy.service
进入编辑界面过后可以直接将以下配置添加到文件里即可
#https://github.com/caddyserver/dist/blob/master/init/caddy.service
[Unit]
Description=Caddy
Documentation=https://caddyserver.com/docs/
After=network.target network-online.target
Requires=network-online.target
[Service]
Type=notify
User=root
Group=root
ExecStart=/usr/local/bin/caddy run --environ --config /etc/caddy/Caddyfile --adapter caddyfile
ExecReload=/usr/local/bin/caddy reload --config /etc/caddy/Caddyfile --adapter caddyfile
#注意看这里的后面这个Caddyfile的文件路径,务必确保其正确
Restart=on-failure
User=caddy
Group=caddy
Environment=XDG_DATA_HOME=/var/lib/caddy
Environment=XDG_CONFIG_HOME=/etc/caddy
LimitNOFILE=1048576
#AmbientCapabilities=CAP_NET_BIND_SERVICE
#如果不是在root下运行caddy就把上面一行注释取消掉(主要在于是否允许非root用户将站点或服务绑定至前1024常用端口)
[Install]
WantedBy=multi-user.target
然后保存并退出,再执行以下命令重载一下systemd配置就可以通过systemd服务启动和管理caddy了
sudo systemctl daemon-reload #重载systemd配置
sudo systemctl enable caddy #设置caddy作为开机启动项(可选)
基础配置
caddy的站点配置非常简单,与apache和nginx不同,caddy的配置文件夹中默认只有Caddyfile这一个文件,并且支持通过这一个文件配置多个站点
包管理器安装的Caddy
包管理器安装的caddy的配置文件的路径都都统一在/etc/caddy
路径下,所以直接进入该路径即可见到默认的Caddyfile
Caddyfile的配置可以参考如下:
方法一:通过import进行导入
Caddyfile配置
# https://caddyserver.com/docs/caddyfile/options
{
admin off
http_port 80
https_port 443
}
import /path/to/another/sites#(只用具体到文件夹)通过import导入其它文件夹中的.conf文件配置其他站点,配置与上相同
/path/to/another/sites/domain-name.conf
的文件配置:
domain-name {
root * /path/to/your/page # 网页根目录
file_server # 启用静态文件服务
tls youremail@example.com # 默认使用Let's Encrypt获取免费证书
reverse_proxy localhost:8080 # 设置代理,将请求代理到另一个服务器或服务
redir https://example.com{uri} # 手动配置重定向
header xxxxxx # 通过header配置响应头,比如配置HSTS或者设置缓存控制
errors /path/to/404.html # 自定义404错误页面
log /var/log/caddy/access.log # 自定义日志输出文件路径
}
方法二:直接配置在Caddyfile里
domain-name1 {
root * /path/to/your/page # 网页根目录
file_server # 启用静态文件服务
tls youremail@example.com # 默认使用Let's Encrypt获取免费证书
reverse_proxy localhost:8080 # 设置代理,将请求代理到另一个服务器或服务
redir https://example.com{uri} # 手动配置重定向
header xxxxxx # 通过header配置响应头,比如配置HSTS或者设置缓存控制
errors /path/to/404.html # 自定义404错误页面
log /var/log/caddy/access.log # 自定义日志输出文件路径
}
domain-name2 {
root * /path/to/your/page # 网页根目录
file_server # 启用静态文件服务
tls youremail@example.com # 默认使用Let's Encrypt获取免费证书
reverse_proxy localhost:8080 # 设置代理,将请求代理到另一个服务器或服务
redir https://example.com{uri} # 手动配置重定向
header xxxxxx # 通过header配置响应头,比如配置HSTS或者设置缓存控制
errors /path/to/404.html # 自定义404错误页面
log /var/log/caddy/access.log # 自定义日志输出文件路径
}
……
参考
caddy通过包管理器安装指南:https://caddyserver.com/docs/install
caddy官方github仓库地址:https://github.com/caddyserver/caddy