Caddyfile 是 Caddy 的人类可读配置语言,是配置 HTTP 服务器、TLS 设置和请求处理逻辑的主要接口。本文档涵盖完整的 Caddyfile 系统,包括其语法、解析管道、指令系统以及它如何与 Caddy 的核心配置管理集成。
有关 Caddyfile 编译成的底层 JSON 配置格式的信息,请参阅配置系统。有关特定 HTTP 处理程序指令的详细信息,请参阅HTTP 处理程序。
Caddyfile 系统作为配置适配器运行,将人类可读的文本转换为 Caddy 的原生 JSON 配置格式。它位于用户输入和 Caddy 的核心配置系统之间。
来源:caddyconfig/httpcaddyfile/httptype.go38-39 caddyconfig/caddyfile/parse.go39-58
Caddyfile 适配器遵循多阶段管道,其中文本首先被词法分析为标记,解析为结构化的服务器块,然后通过 ServerType.Setup 方法适配为 Caddy 的 JSON 配置格式。
来源:caddyconfig/httpcaddyfile/httptype.go53-54 caddyconfig/httpcaddyfile/directives.go656-658 caddyconfig/caddyfile/dispenser.go28-37
Caddyfile 的解析过程涉及多个阶段,将原始文本转换为结构化的配置数据。
解析从词法分析开始,将原始 Caddyfile 文本转换为标记流。
来源:caddyconfig/caddyfile/parse.go63-65 caddyconfig/caddyfile/parse.go67-111
解析器将标记组织成服务器块,每个块代表一个带有其相关主机名和指令的独立服务器。
来源:caddyconfig/caddyfile/parse.go210-291 caddyconfig/caddyfile/parse.go320-348
HTTP Caddyfile 适配器将服务器块转换为 Caddy 的 JSON 配置。
来源:caddyconfig/httpcaddyfile/httptype.go56-87
Caddyfile 配置以服务器块的形式组织,每个块定义一个带有相关主机名和指令的服务器。
hostname:port, another.host {
directive arg1 arg2
directive {
subdirective value
}
}
解析器通过 ServerBlock 结构识别多个关键语法元素。
来源:caddyconfig/caddyfile/parse.go210-291 caddyconfig/httpcaddyfile/httptype.go66-80
指令根据 directiveOrder 中定义的预设顺序进行处理。
来源:caddyconfig/httpcaddyfile/directives.go32-98 caddyconfig/httpcaddyfile/directives.go100-103
Caddyfile 解析器通过 Dispenser 接口处理各种参数和块结构。
来源:caddyconfig/caddyfile/dispenser.go82-99 caddyconfig/caddyfile/dispenser.go167-192
指令通过两种主要机制针对不同类型的功能进行注册。
来源:caddyconfig/httpcaddyfile/directives.go105-114 caddyconfig/httpcaddyfile/directives.go116-138
该系统包含许多内置指令解析器,可处理常见的服务器配置需求。
来源:caddyconfig/httpcaddyfile/builtins.go38-56 caddyconfig/httpcaddyfile/builtins.go86-605
指令顺序可通过全局选项和插件注册进行自定义。
来源:caddyconfig/httpcaddyfile/directives.go153-187 caddyconfig/httpcaddyfile/options.go102-175
Dispenser 提供一个基于游标的接口,用于在指令解析期间导航和消耗标记。
来源:caddyconfig/caddyfile/dispenser.go28-37 caddyconfig/caddyfile/dispenser.go57-66
分发器跟踪嵌套级别以正确处理嵌套块并维护解析上下文。
来源:caddyconfig/caddyfile/dispenser.go167-192 caddyconfig/caddyfile/dispenser.go194-198
Caddyfile 通过 import 指令支持导入外部文件和代码片段。
来源:caddyconfig/caddyfile/parse.go356-450 caddyconfig/caddyfile/importargs.go96-155
适配过程从指令处理中收集配置值,并按类别组织它们。
来源:caddyconfig/httpcaddyfile/directives.go417-435 caddyconfig/httpcaddyfile/httptype.go155-172
适配器将服务器块整合到 HTTP 服务器配置中。
来源:caddyconfig/httpcaddyfile/httptype.go174-188 caddyconfig/httpcaddyfile/httptype.go531-985
适配过程通过组装完整的 JSON 格式 Caddy 配置结束。
来源:caddyconfig/httpcaddyfile/httptype.go269-362 caddyconfig/httpcaddyfile/httptype.go202-223