import
包含一个 代码片段 或文件,用代码片段或文件的内容替换此指令。
此指令是一个特殊情况:它在解析结构之前进行评估,并且可以出现在 Caddyfile 中的任何位置。
语法
import <pattern> [<args...>]
-
<pattern> 是要包含的文件名、通配符模式或 代码片段 的名称。它的内容将替换此行,就好像该文件的内容从一开始就出现在这里一样。
如果找不到特定文件,则会发生错误,但空通配符模式不会发生错误。
如果导入特定文件,则如果文件为空,将发出警告。
如果模式是文件名或通配符,它始终相对于出现
import
的文件。如果使用通配符模式
*
作为最终路径段,则隐藏文件(即以.
开头的文件)将被忽略。要导入隐藏文件,请使用.*
作为最终段。 -
<args...> 是一个可选的参数列表,用于传递给导入的标记。此占位符是一个特殊情况,它在 Caddyfile 解析时进行评估,而不是在运行时进行评估。它们可以以各种形式使用,类似于 Go 的切片语法
{args[n]}
其中n
是参数的 0 索引位置。{args[:]}
其中插入所有参数。{args[:m]}
其中插入m
之前的参数。{args[n:]}
其中插入从n
开始的参数。{args[n:m]}
其中插入n
和m
之间的参数。
对于插入多个标记的形式,占位符必须是一个 标记,它不能是另一个标记的一部分。换句话说,它必须有空格,并且不能在引号中。
请注意,在 v2.7.0 之前,语法是
{args.N}
,但这种形式已被弃用,取而代之的是上面更灵活的语法。
示例
导入相邻 sites-enabled 文件夹中的所有文件(隐藏文件除外)
import sites-enabled/*
导入使用导入参数设置 CORS 标头的代码片段
(cors) {
@origin header Origin {args[0]}
header @origin Access-Control-Allow-Origin "{args[0]}"
header @origin Access-Control-Allow-Methods "OPTIONS,HEAD,GET,POST,PUT,PATCH,DELETE"
}
example.com {
import cors example.com
}
导入一个代码片段,该代码片段将代理上游列表作为参数
(https-proxy) {
reverse_proxy {args[:]} {
transport http {
tls
}
}
}
example.com {
import https-proxy 10.0.0.1 10.0.0.2 10.0.0.3
}
导入一个代码片段,该代码片段创建一个代理,其前缀重写规则作为第一个参数
(proxy-rewrite) {
rewrite * {args[0]}{uri}
reverse_proxy {args[1:]}
}
example.com {
import proxy-rewrite /api 10.0.0.1 10.0.0.2 10.0.0.3
}