Caddyfile 指令
指令是在站点 块 中出现的具有功能性的关键字。有时,它们可能会打开自己的块,其中可以包含子指令,但指令不能在其他指令中使用,除非另有说明。例如,您不能在file_server
块中使用basicauth
,因为file_server
不知道如何进行身份验证。但是,您可以在像handle
和route
这样的特殊指令块中使用某些指令,因为它们专门设计用于对 HTTP 处理程序指令进行分组。
以下指令是 Caddy 的标准配置,可以在 HTTP Caddyfile 中使用
指令 | 描述 |
---|---|
abort | 中止 HTTP 请求 |
acme_server | 嵌入式 ACME 服务器 |
basicauth | 强制执行 HTTP 基本身份验证 |
bind | 自定义服务器的套接字地址 |
encode | 对响应进行编码(通常是压缩) |
error | 触发错误 |
file_server | 从磁盘提供文件 |
forward_auth | 将身份验证委托给外部服务 |
handle | 一组互斥的指令 |
handle_errors | 定义用于处理错误的路由 |
handle_path | 类似于 handle,但会剥离路径前缀 |
header | 设置或删除响应头 |
import | 包含代码片段或文件 |
invoke | 调用命名路由 |
log | 启用访问/请求日志记录 |
map | 将输入值映射到一个或多个输出 |
method | 在内部更改 HTTP 方法 |
metrics | 配置 Prometheus 指标公开端点 |
php_fastcgi | 通过 FastCGI 提供 PHP 网站 |
push | 使用 HTTP/2 服务器推送将内容推送到客户端 |
redir | 向客户端发出 HTTP 重定向 |
request_body | 操作请求主体 |
request_header | 操作请求头 |
respond | 向客户端写入硬编码的响应 |
reverse_proxy | 功能强大且可扩展的反向代理 |
rewrite | 在内部重写请求 |
root | 设置站点根目录的路径 |
route | 一组指令,作为单个单元进行字面处理 |
skip_log | 跳过匹配请求的访问日志记录 |
templates | 在响应上执行模板 |
tls | 自定义 TLS 设置 |
tracing | 与 OpenTelemetry 追踪集成 |
try_files | 取决于文件是否存在而进行的重写 |
uri | 操作 URI |
vars | 设置任意变量 |
语法
每个指令的语法看起来像这样
directive [<matcher>] <args...> {
subdirective [<args...>]
}
<carets>
表示要由实际值替换的标记。
[brackets]
表示可选参数。
省略号...
表示继续,即一个或多个参数或行。
子指令通常是可选的,除非有文档说明,即使它们没有出现在[brackets]
中。
匹配器
大多数(但不是全部)指令接受匹配器标记,这些标记允许您过滤请求。匹配器标记通常是可选的。如果您在指令的语法中看到以下内容,则指令支持匹配器
[<matcher>]
由于匹配器标记的工作方式都相同,因此为了减少重复,不会在每个页面上描述匹配器标记的各种可能性。相反,请参阅匹配器文档,以详细了解语法。
指令顺序
许多指令操作 HTTP 处理程序链。这些指令的评估顺序很重要,因此 Caddy 中硬编码了默认排序。
您可以使用order
全局选项 或route
指令 来覆盖/自定义此排序。
tracing
map
vars
root
skip_log
header
copy_response_headers # only in reverse_proxy's handle_response block
request_body
redir
# incoming request manipulation
method
rewrite
uri
try_files
# middleware handlers; some wrap responses
basicauth
forward_auth
request_header
encode
push
templates
# special routing & dispatching directives
invoke
handle
handle_path
route
# handlers that typically respond to requests
abort
error
copy_response # only in reverse_proxy's handle_response block
respond
metrics
reverse_proxy
php_fastcgi
file_server
acme_server
排序算法
为了方便使用,Caddyfile 适配器根据以下规则对指令进行排序