Caddy

配置

管理 API

配置的动态下发、遍历与导出,全部走一个本地端点。

Caddy 的管理端点是它最与众不同的地方之一:配置是活的,可以随时读取、修改、导出,所有改动都优雅、零停机。

端点一览

方法与路径作用
GET /config/读取当前完整配置
POST /load替换整份配置
POST /stop优雅停止 Caddy
GET /config/...路径读取配置里的某个子树
POST /config/...路径在该子树下插入或创建
PUT /config/...路径覆盖该子树
PATCH /config/...路径修改数组里的某一项
DELETE /config/...路径删除该子树
GET /id/...模块 ID按模块的 ID 定位,不受数组位置影响

替换整份配置

终端
curl localhost:2019/load \
	-H "Content-Type: application/json" \
	-d @caddy.json

/load 是唯一一个会替换整份配置的端点,Caddyfile 走 API 时也只能用它。

配置遍历

配置文档的路径就是 API 的路径。想看 HTTP 应用里第一台服务器的第一条路由,直接问:

终端
curl localhost:2019/config/apps/http/servers/srv0/routes/0

往这个路径 POST 一段 JSON 就能加一条路由:

终端
curl localhost:2019/config/apps/http/servers/srv0/routes \
	-H "Content-Type: application/json" \
	-d '{
		"handle": [{
			"handler": "static_response",
			"body": "Hi"
		}]
	}'

优雅与回滚

新配置会先启动,确认无误后再停掉旧配置,所以在极短的时间窗口里两份配置同时在运行。如果新配置加载失败,Caddy 会回滚到上一份能用的配置,服务器不会因此下线。

导出

当前运行中的配置随时可以导出归档:

终端
curl localhost:2019/config/ > running.json

这也是把运行时状态固化下来、交给版本管理的方式。前提是你最初就是用 JSON 配置的;走适配器进来的配置无法还原回原格式。