关于 caddy
用于通过 Caddy Admin API 管理本地开发反向代理的技能,涵盖状态检查、路由注册、更新和删除,面向本地项目代理管理。
主要功能
- 01检查 Caddy 状态并列出路由
- 02注册命名的 localhost 代理
- 03查找可用端口
- 04更新或删除代理路由
- 05处理常见设置错误
适用场景
- 01通过命名的 .localhost 地址访问本地项目
- 02查看现有开发代理路由
- 03更改代理后端端口
- 04排查未运行的 Caddy 服务
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ muninn-huginn/ caddy-skill --skill caddy安装后在 Claude Code 中输入/caddy确认已加载。
详细介绍
Caddy 本地代理管理器
通过 Caddy 的 Admin API(localhost:2019)管理本地开发反向代理。
会话命名
注册代理时,使用以下任一方式:
- 用户提供名称:完全按用户指定的名称使用
- 根据上下文生成:使用项目目录名称 + 简短随机后缀(例如,
myapp-x7k2)
生成示例:
NAME="$(basename "$PWD" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9]/-/g')-$(head -c4 /dev/urandom | xxd -p | head -c4)"
快速参考
| 任务 | 命令 |
|---|---|
| 检查状态 | curl -sf http://localhost:2019/config/ |
| 列出路由 | curl -sf http://localhost:2019/config/apps/http/servers/local_proxies/routes |
| 添加路由 | POST /config/apps/http/servers/local_proxies/routes |
| 删除路由 | DELETE /id/proxy_<name> |
工作流
检查 Caddy 状态
curl -sf http://localhost:2019/config/ 2>/dev/null
如果失败:"Caddy 未运行。安装:brew install caddy,启动:caddy start"
列出所有代理
curl -sf http://localhost:2019/config/apps/http/servers/local_proxies/routes 2>/dev/null
以表格形式显示:名称 | URL | 后端
注册代理
-
获取或生成名称(询问用户,或根据项目名称 + 随机后缀生成)
-
查找可用端口(如果未指定):
for port in $(seq 3000 3100); do
lsof -i :$port > /dev/null 2>&1 || { echo $port; break; }
done
- 按需初始化服务:
curl -sf http://localhost:2019/config/apps/http/servers/local_proxies > /dev/null 2>&1 || \
curl -sf -X POST http://localhost:2019/load \
-H "Content-Type: application/json" \
-d '{"apps":{"http":{"servers":{"local_proxies":{"listen":[":80"],"routes":[]}}}}}'
- 添加路由(替换 NAME 和 PORT):
curl -sf -X POST "http://localhost:2019/config/apps/http/servers/local_proxies/routes" \
-H "Content-Type: application/json" \
-d '{"@id":"proxy_NAME","match":[{"host":["NAME.localhost"]}],"handle":[{"handler":"reverse_proxy","upstreams":[{"dial":"localhost:PORT"}]}],"terminal":true}'
- 报告:"已注册:
http://NAME.localhost → localhost:PORT"
移除代理
curl -sf -X DELETE "http://localhost:2019/id/proxy_NAME"
更新代理
先删除,再使用新端口重新添加。
路由 JSON 结构
{
"@id": "proxy_<name>",
"match": [{"host": ["<name>.localhost"]}],
"handle": [{"handler": "reverse_proxy", "upstreams": [{"dial": "localhost:<port>"}]}],
"terminal": true
}
错误处理
| 错误 | 解决方案 |
|---|---|
| Caddy 未运行 | brew install caddy && caddy start |
| 端口 80 被拒绝 | sudo caddy start |
| 路由已存在 | 询问用户是要更新还是选择其他名称 |
平台说明
- macOS:
*.localhost会自动解析为 127.0.0.1 - Linux:可能需要添加
/etc/hosts条目
评论
支持 Markdown