Caddy实战(十一)| Caddyfile 设计之美

本文深入探讨Caddyfile的结构、指令、占位符、片段和环境变量等关键概念,揭示其设计背后的思考。通过学习,不仅可以更好地理解和使用Caddyfile,还能借鉴其设计理念来设计配置文件。Caddyfile类似于一门小型编程语言,包含全局配置、可复用片段和站点配置,支持请求匹配、环境变量和注释,是理解Caddy服务器配置的关键。
摘要由CSDN通过智能技术生成

点击上方蓝色“飞雪无情”关注我,设个星标,第一时间看文章

Caddyfile是Caddy的核心配置文件,它的设计,关乎着我们使用,开发者的解析以及扩展,所以本篇着重的介绍Caddy是如何设计一个Caddyfile的,我们也可以从中学到如何设计一个配置文件,并且让它更好的通用,更好的解析。

其实设计如此复杂的一个配置文件,已经和设计一门编程语言,很接近了。

结构

我前面的系统文章中,你也看到了如何使用Caddyfile的指令等功能,来满足我们的需求的。在我们写Caddyfile的时候,是遵循一定的规范的,哪些地方要怎么写,谁可以包含谁,这些规范就构成了Caddyfile的结构。

这张图是了解Caddyfile的神器,它定了Caddy的规范以及结构,让我们可以很方面的使用Caddyfile。现在,我来介绍下里面的一些关键点:

看到最顶部的红色框圈出来的这部分了吗?这是一个全局配置,它在Caddyfile的最顶部,用于配置一些通用的全局信息。当然它并不是必须的,你也可以不用配置它。

第二部分的 snippet 是一个可以复用的片段,你可以在其他地方通过 import 来引入它,这非常适用于你的Caddyfile中有很多重复配置的情况。它和全局配置的差别在于 {  前面有一对小括号,用于定义可复用片段的名字,这样你才可以在其他地方通过这个名字引用。下面我通过一个例子来说明它的使用,如下所示:

(static_file){
  root * /var/www/mysite
  file_server 
}

www.example.com{
  import static_file
}
www.example.com{
  import static_file
}

接下来就是 Site Block 了,也就是定义你的站点的块,在Apache中叫虚拟主机。写到这里你可以看到,Caddyfile只有这三个顶级的定义块,一个全局配置、一个可复用的片段、一个就是站点配置,其他所有的配置,都要放在这三个顶级的配置中。

你可以通过站点块定义多个站点,但是他们之间没什么关系。如果你只有一个站点,你可以省略站点后面的大括号,比如下面两种定义是等价的:

localhost

reverse_proxy /api/* localhost:9001
file_server

等价于:

localhost {
    reverse_proxy /api/* localhost:9001
    file_server
}

因为整个Caddyfile中只有这么一个站点,所以大括号是可选的。

在一个Caddyfile中,你可以至少得定义一个站点,也可以定义多个,并且定义站点的时候,大括号前面的部分必须是 Site Address ,比如示例中的 localhost ,一个站点可以有一个站点地址,也可以有多个。

Block ,也就是大括号 {} 内的这部分。左大括号 {  必须在行的末尾,而右大括号 } 则必须自己单独占一行,这和我们Go语言编程很像,这样可以保持美观。

... {
    ...
}

我们前面讲过,只有一个站点的时候,大括号是可选的,但是当有多个站点的时候,必须得用大括号把他们分开。

example1.com {
    root * /www/example.com
    file_server
}
example2.com {
    reverse_proxy localhost:9000
}

如果一个网络请求,匹配多个站点,那么Caddy只会选择地址最匹配的那个,不会同时匹配多个站点,这保障了站点匹配的唯一性,不会级联。

指令

指令只能属于某个站点,它是定义站点服务的关键字,位于一行中的第一个单词。比如我们示例中的 file_server 就是一个定义静态文件服务的指令。

指令也可以有子指令,子指令位于指令

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值