Caddy 配了 admin off 之后,systemctl reload 会失败

2026 / 10 / 14#caddy#systemd#运维

现象

改完 /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 只校验语法和结构,不保证能成功加载。端口被占用、证书申请失败这类问题它发现不了。

本文为个人学习记录,可能存在错误或已过时,仅供参考。
← 返回笔记列表