3. 尝试使用caddyAPI & JSON

3.1. Hello World! ( Heredoc )

使用caddy runcaddy start启动caddy,不要带任何配置文件。现在caddy已经在“空转”了,我们使用Heredoc[4]的方式,通过API接口给它加载一些配置:

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

把这个配置加载到caddy以后,我们在客户端使用浏览器访问caddy服务器的2015端口,http://192.168.31.2:2015,或者也可以使用命令:curl http://192.168.31.2:2015。我们会看到“Hello, world!”

3.2. Hello World! ( JSON )

用Heredoc字符流的方式加载配置还是有点费劲的,前面的例子只是让我们知道caddy的这种工作方式。更常用的方式还是把配置写在一个文件中,然后再加载。

接下来我们把前面的配置内容写入到一个简单的JSON配置文件中,然后同样使用curl命令完成加载。文件名称为caddy.json,其内容如下:

  1 {
  2     "apps": {
  3         "http": {
  4             "servers": {
  5                 "hello": {
  6                     "listen": [":2015"],
  7                     "routes": [
  8                         {
  9                             "handle": [{
 10                                 "handler": "static_response",
 11                                 "body": "Hello, world!"
 12                             }]
 13                         }
 14                     ]
 15                 }
 16             }
 17         }
 18     }
 19 }

现在使用如下的命令加载这个配置文件:

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

同样,我们可以在客户端通过浏览器或curl来访问一下2015端口:

curl http//192.168.31.2:2015

如果能看到Hello,world!那就代表刚才的配置文件已经生效了。

[提示]提示
实际上caddyAPI在大多数情况下,是为其他程序所设计的一种接口。

3.3. 配置多站点 ( JSON & API)

接下来我们更新一下caddy.json文件,定义两个站点,一个在2015端口,一个在2016端口:

  1 {
  2     "apps": {
  3         "http": {
  4             "servers": {
  5                 "hello": {
  6                     "listen": [":2015"],
  7                     "routes": [
  8                         {
  9                             "handle": [{
 10                                 "handler": "static_response",
 11                                 "body": "Hello, world!"
 12                             }]
 13                         }
 14                     ]
 15                 },
 16                 "bye": {
 17                     "listen": [":2016"],
 18                     "routes": [
 19                         {
 20                             "handle": [{
 21                                 "handler": "static_response",
 22                                 "body": "Goodbye, world!"
 23                             }]
 24                         }
 25                     ]
 26                 }
 27             }
 28         }
 29     }
 30 }

然后再次使用如下的命令来加载这个文件:

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

然后在客户端分别访问:http://192.168.31.2:2015http://192.168.31.2:2016,会看到“Hello, world!”及“Goodbye, world!”。

[提示]提示
caddy.json这个文件也可以通过命令行来使用:caddy start --config caddy.json

使用API可以做很多的事情,包括导出配置和对配置进行细粒度的更改(而不是更新整个内容)。建议阅读更完整的API教程:https://caddyserver.com/docs/api-tutorialhttps://caddyserver.com/docs/api



[4] Heredoc:向交互式命令传递多行文本或代码的一种方式,第一行是以可选命令开始,紧接着是重定向符号 <<, 你可以使用任何字符串作为分隔符,我们最常用的是 EOF(End Of File) 或者 END