Caddy Web 服务器自动 HTTPS
bash 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
### macOS(使用 Homebrew)
```bash
brew install caddy
验证安装
caddy version
第二步:你的第一个自动 HTTPS 站点
Caddy 的配置核心是 Caddyfile。创建一个最简单的静态站点,感受自动 HTTPS 的魔力。
1. 创建网站目录和首页
sudo mkdir -p /var/www/example.com
echo '<h1>Hello, Caddy!</h1>' | sudo tee /var/www/example.com/index.html
2. 编辑 Caddyfile
默认情况下,Caddyfile 位于 /etc/caddy/Caddyfile。写入以下内容:
example.com {
root * /var/www/example.com
file_server
}
替换
example.com为你实际拥有的域名,并确保该域名的 DNS 已指向本服务器 IP。
3. 启动 Caddy
sudo systemctl restart caddy
Caddy 启动后,会自动请求证书并重载 HTTPS。访问 https://example.com,你会看到安全连接图标和网页内容。
第三步:深入理解 Caddyfile 的 HTTPS 控制
虽然自动 HTTPS 完全默认启用,但你仍可以对其行为进行精细调整。
强制重定向 HTTP 到 HTTPS
Caddy 会自动为所有站点启用 HTTP → HTTPS 重定向,你无需添加任何指令。如果你希望禁用该行为:
example.com {
redir / / 302 # 这不会生效,因为自动 HTTPS 先接管
}
实际上,要取消自动重定向,需使用全局选项:
{
auto_https off
}
example.com {
# 现在你可以完全手动控制
}
使用特定 CA 或自定义证书
修改全局选项可切换默认 CA 为 ZeroSSL:
{
acme_ca https://acme.zerossl.com/v2/DV90
email your@email.com # ZeroSSL 要求提供邮箱
}
若要使用你自己的证书,按如下配置:
example.com {
tls /path/to/cert.pem /path/to/key.pem
root * /var/www/example.com
file_server
}
为内网或本地域名关闭 HTTPS
当你需要开发环境或没有公网域名时,可局部禁用自动 HTTPS:
localhost {
auto_https off
}
或者只想监听 HTTP 而不重定向:
http://example.com {
# 将仅使用 HTTP
}
第四步:反向代理场景下的自动 HTTPS
Caddy 作为反向代理时,自动 HTTPS 同样省心。以下示例将所有流量代理到后端服务 http://localhost:3000。
api.example.com {
reverse_proxy localhost:3000
}
只需这一行,Caddy 便会处理证书、HTTP/2 和 HTTPS 强制跳转。你还可以添加头部、日志等:
api.example.com {
reverse_proxy localhost:3000 {
header_up Host {host}
header_up X-Real-IP {remote_host}
}
log {
output file /var/log/caddy/api.log
}
}
第五步:高级—通配符证书与 DNS 挑战
当你想使用通配符证书(*.example.com)或无法使用 HTTP/TLS 挑战时,必须采用 DNS 挑战。Caddy 通过官方模块支持几十种 DNS 提供商。
安装 DNS 挑战模块
在安装 Caddy 时,可一次性下载包含所需 DNS 插件的定制版本。例如,使用 Cloudflare 提供商:
# 下载包含 cloudflare 模块的 Caddy 版本
caddy add-package github.com/caddy-dns/cloudflare
或者直接使用 xcaddy 构建自定义版本:
xcaddy build --with github.com/caddy-dns/cloudflare
配置 Caddyfile 使用 DNS 挑战
首先设置环境变量以存储 API 凭证(不同提供商需要不同变量):
export CLOUDFLARE_API_TOKEN=your_token_here
然后在 Caddyfile 全局选项中启用 DNS 挑战:
{
acme_dns cloudflare
}
*.example.com, example.com {
tls {
dns cloudflare
}
root * /var/www/example.com
file_server
}
这样 Caddy 就能为根域名和所有子域名申请一个通配符证书,所有步骤全自动。
常见问题与故障排除
证书获取失败:“无法验证域名”
- 检查域名是否正确解析到服务器公网 IP。
- 确保防火墙开放 80 和 443 端口。
- 如果使用 HTTP 挑战,80 端口必须可被外部访问。
服务器重启后 Caddy 没有自动启动
设置开机自启:
sudo systemctl enable caddy
sudo systemctl start caddy
如何查看证书详细信息?
使用 caddy 命令行工具:
sudo caddy list-certificates