caddy: 支持动态更新配置的web server服务

361 阅读2分钟

下载与安装

Caddy下载

下载到的exe是一个命令行工具,需要配置到环境变量中

中文文档

Caddyfile 快速入门 — Caddy v2中文文档 (dengxiaolong.com)

运行

caddy run

可能会出现如下错误(默认端口为2019,可能无法在该端口下运行)

PS D:\app\caddy-amd64> .\caddy.exe run
Error: loading initial config: loading new config: starting caddy administration endpoint: listen tcp 127.0.0.1:2019: bind: An attempt was made to access a socket in a way forbidden by its access permissions.

caddy.exe目录创建Caddyfile文件,内容如下:(将端口改为9000)

{
    admin 127.0.0.1:9000
}

Caddyfile配置 — Caddy v2中文文档 (dengxiaolong.com)

再次尝试运行,正确运行结果如下:caddy.exe run(不指定配置文件的情况下,会在命令执行目录找Caddyfile文件作为默认配置文件,没有在当前目录找到配置文件的话,就使用程序的默认配置)

image.png

如果不在caddy.exe目录下运行,那就需要显示的指定配置文件,否则还是会报之前的错误

使用curl localhost:9000/config/, 得到的结果是

image.png

关于caddy adapt命令

caddy adapt默认会将当前目录下的Caddyfile文件内容,转换为xml格式,并输出到控制台,并不会更新caddy的配置

caddy adapt --config /path/to/Caddyfile 可以指定配置文件路径

如何更新caddy配置

caddy貌似不是增量更新,每次更新都必须全量更新(也就是说你每次更新都要传完整的配置)

方式一:通过curl将json配置文件传给caddy, 使得caddy更新

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

方式二:直接传递json配置文件内容

curl localhost:2019/load \
    -X POST \
    -H "Content-Type: application/json" \
    -d @- << EOF
    {
        "apps": {
            "http": {
                "servers": {
                    "hello": {
                        "listen": [":2015"],
                        "routes": [
                            {
                                "handle": [{
                                    "handler": "static_response",
                                    "body": "Hello, world!"
                                }]
                            }
                        ]
                    }
                }
            }
        }
    }
EOF

方式三: 直接传递Caddyfile配置文件,来更新Caddy配置

curl localhost:2019/load \ -X POST \ -H "Content-Type: text/caddyfile" \ --data-binary @Caddyfile