Caddy 實戰(四)- 使用 API 管理 Caddy
和 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/,第一時間看後續精彩文章。覺得好的話,請猛擊文章右下角「在看」,感謝支持。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/K54z4mKCjsFfrdWHM0KQTg