Caddyfile 指令
指令是在站点块内出现的功能关键字。有时,它们可以打开自己的块,块中可以包含子指令,但除非另有说明,指令不能在其他指令内部使用。例如,你不能在 file_server 块内使用 basic_auth,因为 file_server 并不知道如何进行身份验证。然而,你可以在像 handle 和 route 这样的特殊指令块中使用某些指令,因为它们是专门用于分组 HTTP 处理器指令的。
以下指令为 Caddy 的标准指令,可在 HTTP Caddyfile 中使用:
| Directive | Description |
|---|---|
| abort | 中止 HTTP 请求 |
| acme_server | 嵌入式 ACME 服务器 |
| basic_auth | 强制 HTTP 基本认证 |
| bind | 自定义服务器的套接字地址 |
| encode | 对响应进行编码(通常是压缩) |
| error | 触发错误 |
| file_server | 从磁盘提供文件 |
| forward_auth | 将认证委托给外部服务 |
| fs | 设置用于文件 I/O 的文件系统 |
| handle | 互斥的一组指令 |
| handle_errors | 定义用于处理错误的路由 |
| handle_path | 类似 handle,但会剥离路径前缀 |
| header | 设置或移除响应头 |
| import | 包含片段或文件 |
| intercept | 拦截其他处理器写入的响应 |
| invoke | 调用命名路由 |
| log | 启用访问/请求日志 |
| log_append | 向访问日志追加字段 |
| log_skip | 为匹配的请求跳过访问日志 |
| log_name | 覆盖要写入的记录器名称 |
| map | 将输入值映射到一个或多个输出 |
| method | 在内部更改 HTTP 方法 |
| metrics | 配置 Prometheus 指标导出端点 |
| php_fastcgi | 通过 FastCGI 提供 PHP 站点 |
| push | 使用 HTTP/2 服务器推送向客户端推送内容 |
| redir | 向客户端发出 HTTP 重定向 |
| request_body | 操作请求体 |
| request_header | 操作请求头 |
| respond | 向客户端写入固定响应 |
| reverse_proxy | 功能强大且可扩展的反向代理 |
| rewrite | 在内部重写请求 |
| root | 设置站点根路径 |
| route | 作为单一单元字面对待的一组指令 |
| templates | 在响应上执行模板 |
| tls | 自定义 TLS 设置 |
| tracing | 与 OpenTelemetry 跟踪的集成 |
| try_files | 依赖文件存在性的重写 |
| uri | 操作 URI |
| vars | 设置任意变量 |
语法
每个指令的语法看起来类似于:
directive [<matcher>] <args...> {
subdirective [<args...>]
}
尖括号
方括号[brackets]表示可选参数。
省略号 ... 表示延续,即一个或多个参数或多行。
子指令通常是可选的,除非另有文档说明,即使它们没有出现在[brackets]中也是如此。
匹配器(Matchers)
大多数——但不是全部——指令接受匹配器标记,用于过滤请求。匹配器标记通常是可选的。如果你在某个指令的语法中看到如下所示,则该指令支持匹配器:
[<matcher>]
因为匹配器标记的工作方式相同,所以为了减少重复,各种匹配器的可能性不会在每一页都详述。请参阅匹配器文档了解语法的详细说明。
指令顺序
许多指令会操作 HTTP 处理器链。那些指令的评估顺序很重要,因此 Caddy 中硬编码了一个默认排序。
你可以使用order 全局选项或route 指令覆盖/自定义此排序。
tracing
map
vars
fs
root
log_append
log_skip
log_name
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
basic_auth
forward_auth
request_header
encode
push
intercept
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 适配器根据以下规则对指令进行排序: