听说Caddy配置很简洁,天然支持https,这次刚买了新的服务器,打算就替换了Nginx,从零开始接触,搞定配置、反向代理和证书,一上午就过去了。使用下来很顺手,不用分别搞Nginx配置和acme定时证书了。
安装Caddy
shell
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
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
# 查看版本
caddy -v
# 重载配置
caddy reload
# 重启服务
systemctl restart caddy
# 常用目录
# 配置文件
/etc/caddy/Caddyfile
# 证书部署目录
/var/lib/caddy/.local/share/caddy/certificates/caddy默认支持https,如果80端口可以使用的话,直接走的网站目录下的文件验证,只要你配置好网站域名,就自动生成证书了。
但是要是使用通配符,只能走acme质询。caddy有自己的插件可以使用,插件名称叫 dns.providers.alidns,这个是阿里云的dns解析组件,还支持腾讯的,华为的,cloudflare。从这里找:caddy-dns · GitHub。
安装xcaddy
xcaddy是caddy插件的构建命令,能用命令肯定不自己去装插件了啊。安装 dns.providers.alidns 插件就使用它。
shell
# 先安装golang环境
wget https://golang.google.cn/dl/go1.25.2.linux-amd64.tar.gz
# 清理go包,重新解压
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.25.2.linux-amd64.tar.gz
# 添加go路径
vim /etc/profile
export PATH=$PATH:/usr/local/go/bin
# 生效
source /etc/profileshell
# 安装xcaddy
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/xcaddy/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-xcaddy-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/xcaddy/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-xcaddy.list
sudo apt update
sudo apt install xcaddy安装alidns插件
shell
cd /tmp
xcaddy build --with github.com/caddy-dns/alidns
# 覆盖caddy
mv /tmp/caddy /usr/bin/caddy网站配置
最后给个简易版的网站配置,是比Nginx简介多了,终于再也不用操心证书的问题了。
shell
{
# 全局配置块,ACME邮箱等
email youremail@gmail.com
acme_dns alidns {
access_key_id "xxx"
access_key_secret "xxx"
}
}
# 支持多个子域名
*.yoursite.com, yoursite.com{
# 强制 HTTPS
@http {
protocol http
}
redir @http https://{host}{uri} permanent
# 反向代理到本地 9000
reverse_proxy 127.0.0.1:9000 {
# 超时配置
transport http {
read_buffer 8192
response_header_timeout 60s
dial_timeout 60s
}
header_up Host {host}
header_up X-Real-IP {remote_host}
header_up Upgrade {>Upgrade}
header_up Connection {>Connection}
}
# 错误日志(Caddy统一在 journal 或 /var/log/caddy 里)
log {
# 可以添加其他配置,例如日志轮转
output file /var/log/caddy/site.log {
roll_local_time
}
}
}