Caddy 把"自动签 Let's Encrypt 证书 + HTTP/2 + 自动续期"做成了默认行为。
nginx 配同样的事情至少 30 行配置 + certbot crontab,Caddy 是 1 行:
example.com {
reverse_proxy localhost:3000
}
安装
# 官方 apt 仓库(也有 yum / 二进制下载)
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 -y caddy
最小可工作 Caddyfile
/etc/caddy/Caddyfile:
example.com {
encode zstd gzip
reverse_proxy 127.0.0.1:3000
header {
Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
X-Content-Type-Options nosniff
Referrer-Policy strict-origin-when-cross-origin
}
}
api.example.com {
reverse_proxy 127.0.0.1:8000
log {
output file /var/log/caddy/api.log
format json
}
}
static.example.com {
root * /var/www/static
file_server
encode zstd gzip
}
encode 自动启用 Brotli / zstd / gzip 链路压缩;reverse_proxy 自动透传
X-Forwarded-*;TLS 证书 80 端口 ACME HTTP-01 自动签 + 续期。
启用
sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy
journalctl -u caddy -n 50
reload 是热重载,不会断现有连接。
防火墙
sudo ufw allow 80/tcp # ACME challenge 需要 80
sudo ufw allow 443/tcp
80 必须开 —— Let's Encrypt 通过 80 端口验证域名所有权。
进阶:通配符证书 + DNS-01
如果你想签 *.example.com,必须用 DNS-01 而不是 HTTP-01。Caddy 需要装
带 DNS 插件的版本:
sudo caddy add-package github.com/caddy-dns/cloudflare
然后:
*.example.com {
tls {
dns cloudflare {env.CF_API_TOKEN}
}
reverse_proxy 127.0.0.1:3000
}
环境变量在 systemd drop-in 里设:
sudo systemctl edit caddy
# [Service]
# Environment=CF_API_TOKEN=xxxx
与 nginx 对比
| 维度 | Caddy | nginx + certbot |
|---|---|---|
| 配置行数 | 1-3 行 | 20-30 行 |
| 自动续期 | 默认 | crontab + reload hook |
| HTTP/3 | 默认 | 编译时 --with-http_v3_module |
| 性能 | 略低 | 略高(C 写的) |
| 配置复杂度 | 低 | 高,但灵活 |
小规模 / 个人项目用 Caddy;流量上去后或者需要复杂 rewrite 用 nginx。
踩过的坑
- 第一次签证书会卡几十秒,是正常 ACME 流程;不要看到日志没动静就 restart,
会把证书签到一半的 nonce 弄丢,触发 LE 频率限制。 - LE 每周每域名最多签 50 张;测试时用
tls internal走 Caddy 内置 CA,
浏览器手动信任即可。 - Caddy 默认证书 / 凭据存
/var/lib/caddy/.local/share/caddy/,备份时别漏。
登录后参与评论。