适用场景:Ubuntu/Debian 服务器,使用 Caddy 为本地服务配置反向代理 + 自动 HTTPS 证书。
一、安装 Caddy
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安装完成后 Caddy 会自动注册为 systemd 服务并启动。
二、配置反向代理
编辑 Caddyfile:
sudo nano /etc/caddy/Caddyfile将原有内容(默认有80端口的规则删除)替换为:
your.domain.com {
reverse_proxy 127.0.0.1:端口号
}
例如代理本地 6743 端口的服务:
xxx.example.com {
reverse_proxy 127.0.0.1:6743
}
保存后重载配置:
sudo systemctl reload caddy
Caddy 会自动申请并续期 Let's Encrypt 证书,无需任何额外配置。
三、防火墙放行端口
确保服务器放行 80 和 443 端口(ACME 验证和 HTTPS 访问必须):
# iptables
# 在 INPUT 链第 3 行插入一条规则:放行所有来源的 TCP 443 端口入站流量,具体第几行,端口号可自行修改。
sudo iptables -I INPUT 4 -p tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT 3 -p tcp --dport 443 -j ACCEPT
#查看所有端口
sudo iptables -L INPUT --line-numbers
#例如删除规则第3条
sudo iptables -D INPUT 3 云服务器还需在控制台安全组中放行 80 和 443 入站规则。
四、Cloudflare 域名托管注意事项
如果域名使用了 Cloudflare,证书申请有两种方案:
方案 A:关闭 Cloudflare 代理(推荐)
在 Cloudflare DNS 面板将对应记录的云朵图标设为灰色(仅 DNS 模式),等待几分钟后 Caddy 自动完成 HTTP-01 验证并获取证书。证书申请成功后可按需开启代理。
方案 B:保留橙云,使用 DNS-01 验证
需要安装带 Cloudflare DNS 插件的 Caddy:
# 停止服务
sudo systemctl stop caddy
#下载带Cloudflare插件的Caddy替换已有安装的caddy,amd64 换成 arm64 就适配 ARM 机器
curl -fsSL "https://caddyserver.com/api/download?os=linux&arch=amd64&p=github.com%2Fcaddy-dns%2Fcloudflare" \
-o caddy && chmod +x caddy && sudo mv caddy /usr/bin/caddy
#查看插件,正常应该显示有dns.providers.cloudflare
caddy list-modules | grep cloudflare
#重启服务
sudo systemctl start caddyCaddyfile 配置:
#对于CF代理的域名,可添加tls字段
your.domain.com {
reverse_proxy 127.0.0.1:端口号
tls {
dns cloudflare {env.CF_API_TOKEN}
resolvers 1.1.1.1 #可选添加
}
}
#或者通过下面,对所有的生效
*.domain.com {
tls {
dns cloudflare {env.CF_API_TOKEN}
resolvers 1.1.1.1 #可选添加
}
}同时设置 Cloudflare API Token 环境变量:
sudo systemctl edit caddy
添加:
[Service]
Environment="CF_API_TOKEN=你的CF_API_Token"
保存后:
sudo systemctl daemon-reload && sudo systemctl restart caddy
五、多个服务同时反代
Caddyfile 支持配置多个站点块,直接追加即可:
komari.example.com {
reverse_proxy 127.0.0.1:14753
}
blog.example.com {
reverse_proxy 127.0.0.1:8090
}
api.example.com {
reverse_proxy 127.0.0.1:3000
}六、常用管理命令
# 查看运行状态
sudo systemctl status caddy
# 重载配置(不中断服务)
sudo systemctl reload caddy
# 重启服务
sudo systemctl restart caddy
# 实时查看日志
journalctl -u caddy -f
# 验证配置文件语法
caddy validate --config /etc/caddy/Caddyfile
原创
Caddy 反向代理部署 HTTPS 教程
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法