Caddy 配了 admin off 之后,systemctl reload 会失败
现象
改完 /etc/caddy/Caddyfile,先验证再重载:
caddy validate --config /etc/caddy/Caddyfile # Valid configuration
systemctl reload caddy
# Job for caddy.service failed.
validate 说配置没问题,reload 却失败。日志里也没有语法错误。
原因
caddy reload 不是读文件重启进程,而是把新配置 POST 给 Caddy 的 admin API(默认 localhost:2019)。
而如果全局块里有:
{
admin off
}
这个 API 根本没开,reload 自然连不上,于是 systemd 的 ExecReload 失败。
两种解法
解法一:改用 restart(最简单)
sudo systemctl restart caddy
Caddy 对 SIGTERM 是优雅退出,但仍会有极短的中断(毫秒到一两秒级),前面有反代/长连接时可能感知得到。
解法二:把 admin 留在本机
{
admin localhost:2019
}
不让它对外暴露,但保留 reload 能力。这是更常见的生产配置 —— admin off 通常是"图省事"写上去的,代价就是失去了热重载。
顺带一个判断技巧
配置里出现 admin off 时,凡是依赖 admin API 的操作都会失效:caddy reload、caddy stop、caddy adapt 的输出校验等。看到 reload 失败,先 grep admin /etc/caddy/Caddyfile,比翻日志快。
另外注意:validate 只校验语法和结构,不保证能成功加载。端口被占用、证书申请失败这类问题它发现不了。
本文为个人学习记录,可能存在错误或已过时,仅供参考。
← 返回笔记列表