文档
一个 项目

import

包含一个 代码片段 或文件,用代码片段或文件的内容替换此指令。

此指令是一个特殊情况:它在解析结构之前进行评估,并且可以出现在 Caddyfile 中的任何位置。

语法

import <pattern> [<args...>]
  • <pattern> 是要包含的文件名、通配符模式或 代码片段 的名称。它的内容将替换此行,就好像该文件的内容从一开始就出现在这里一样。

    如果找不到特定文件,则会发生错误,但空通配符模式不会发生错误。

    如果导入特定文件,则如果文件为空,将发出警告。

    如果模式是文件名或通配符,它始终相对于出现 import 的文件。

    如果使用通配符模式 * 作为最终路径段,则隐藏文件(即以 . 开头的文件)将被忽略。要导入隐藏文件,请使用 .* 作为最终段。

  • <args...> 是一个可选的参数列表,用于传递给导入的标记。此占位符是一个特殊情况,它在 Caddyfile 解析时进行评估,而不是在运行时进行评估。它们可以以各种形式使用,类似于 Go 的切片语法

    • {args[n]} 其中 n 是参数的 0 索引位置。
    • {args[:]} 其中插入所有参数。
    • {args[:m]} 其中插入 m 之前的参数。
    • {args[n:]} 其中插入从 n 开始的参数。
    • {args[n:m]} 其中插入 nm 之间的参数。

    对于插入多个标记的形式,占位符必须是一个 标记,它不能是另一个标记的一部分。换句话说,它必须有空格,并且不能在引号中。

    请注意,在 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
}