点击上方蓝色“飞雪无情”关注我,设个星标,第一时间看文章
和Nginx不一样的是,Caddy还可以使用API来管理,通过这个能力,你可以在CI、CD的时候,对caddy做更多的事情,也更灵活。
查看配置
首先,我们启动一个caddy实例,然后通过caddy提供的/config
API查看它的配置。
➜ caddy run
启动后,caddy 的管理API会在2019端口监听,现在,我们通过访问/config
API,看下它的配置是什么。
➜ ~ curl localhost:2019/config/
null
从以上返回结果看,并没有任何配置,也就是没有任何配置的网络服务。
现在,我们通过API接口来配置一个。
配置Hello World
要实现访问localhost
就可以看到Hello World,我们需要对caddy进行配置。前面的教程中,我们是通过命令行或者Caddyfile配置的,这一次呢,我们通过load
这个API来配置caddy。
首先,我们还是要准备一个Caddyfile,它的内容如下所示:
localhost {
respond "Hello, world!"
}
然后,我们使用curl
这个工具,通过caddy的load
API 上传Caddyfile 配置caddy。
➜ curl -X POST "http://localhost:2019/load" \
-H "Content-Type: text/caddyfile" \
--data-binary @Caddyfile
这里需要注意的是,执行以上命令的目录下一定要有Caddyfile,因为我使用的是@Caddyfile
,是一个相对路径,如果不是,请换成Caddyfile的绝对路径。
现在,再通过curl localhost:2019/config/
访问,就可以看到caddy的配置了。
➜ curl localhost:2019/config/ |jq
{
"apps": {
"http": {
"servers": {
"srv0": {
"listen": [
":443"
],
"routes": [
{
"handle": [
{
"handler": "subroute",
"routes": [
{
"handle": [
{
"body": "Hello, world!",
"handler": "static_response"
}
]
}
]
}
],
"match": [
{
"host": [
"localhost"
]
}
],
"terminal": true
}
]
}
}
}
}
}
看到了吧,这就是我们刚刚通过load
API 达到的重新配置的caddy,以上就是caddy最原始的JSON配置。
jq 是一个JSON工具,如果你的电脑没有的话,可以Google搜索下安装,这里主要用来美化下输出的JSON
/load
API就是一个可以重新设置、替换caddy的admin API,支持JSON文件和Caddyfile。
现在,在浏览器,或者通过curl 访问localhost,就可以看到Hello World了。
➜ curl https://localhost/
Hello, world!
更新部分配置
加入,现在我想把Hello World换成你好,世界,总不能再上传一个Caddyfile覆盖吧?
哈哈,当然不会,caddy 的Admin API提供了可以修改某一部分配置的能力。在caddy中,是可以支持通过URL 路径来指定要访问哪个配置节点的。
注意看我们上面列出的JSON的配置,按JSON节点找,看看Hello World在哪里。看下是不是这个?apps/http/servers/srv0/routes/0/handle/0/routes/0/handle/0/body
,遇到JSON数组,要使用索引作为path,表示第几个元素。
现在把它和/config/
拼接起来就是http://localhost:2019/config/apps/http/servers/srv0/routes/0/handle/0/routes/0/handle/0/body这样的一个URL。
可以访问下它,看看输出什么。
➜ curl http://localhost:2019/config/apps/http/servers/srv0/routes/0/handle/0/routes/0/handle/0/body
"Hello, world!"
成功访问,输出的正好是我们想修改的内容。
现在,通过POST的方法, 把它修改为:你好,世界。
➜ curl http://localhost:2019/config/apps/http/servers/srv0/routes/0/handle/0/routes/0/handle/0/body \
-X POST \
-H "Content-Type: application/json" \
-d '"你好,世界!"'
以上命令回车后,现在你再用浏览器打开https://localhost/,就可以看到:你好,世界!了。
这种可以更新部分配置的方法非常实用,因为它风险小,可以结合编程自动化。
进一步简化配置
上面通过URL PATH遍历配置的方式很方便,可以让我们定位到配置,并且只修改需要修改的配置,但是就是URL太长了,这一小节就带你使用@id
标记来简化它。
要想简化某项配置,首先我们得先给它添加一个标记,比如给上一节中我们要处理的handle
添加一个快捷访问的标记msg
➜ curl http://localhost:2019/config/apps/http/servers/srv0/routes/0/handle/0/routes/0/handle/0/@id \
-X POST \
-H "Content-Type: application/json" \
-d '"msg"'
以上命令执行后,在浏览器里打开http://localhost:2019/config/apps/http/servers/srv0/routes/0/handle/0/routes/0/handle/0/,你将看到如下结果:
{"@id":"msg","body":"你好,世界!","handler":"static_response"}
现在,我们就可以通过这个@id
标记快捷的访问它了,在浏览器中输入http://localhost:2019/id/msg,你会看到和上面的URL一样的输出结果。
所以,通过id标记,不管你是获取配置还是修改配置,URL都会非常简洁,也便于输入。
小节
这一篇文章主要介绍了如何通过Admin API来管理caddy,使用上也非常简单,结合编码,可以很容易的实现自动化配置。
这里我主要介绍了/load
,/config
API,以及@id
标记,还有/stop
、/reverse_proxy/upstreams
API没有介绍,但是使用方法都是大同小异的,并且符合Restful 规范,所以这里就不再介绍了,可以通过查看官方https://caddyserver.com/docs/api了解这些API的详细使用。
精彩推荐
本文为原创文章,转载注明出处,欢迎扫码关注公众号
flysnow_org
或者网站https://www.flysnow.org/,第一时间看后续精彩文章。觉得好的话,请猛击文章右下角「在看」,感谢支持。
扫码关注
分享、点赞、在看就是最大的支持
文章评论