菜单

Caddyfile

相关源文件

Caddyfile 是 Caddy 的人类可读配置语言,是配置 HTTP 服务器、TLS 设置和请求处理逻辑的主要接口。本文档涵盖完整的 Caddyfile 系统,包括其语法、解析管道、指令系统以及它如何与 Caddy 的核心配置管理集成。

有关 Caddyfile 编译成的底层 JSON 配置格式的信息,请参阅配置系统。有关特定 HTTP 处理程序指令的详细信息,请参阅HTTP 处理程序

架构概述

Caddyfile 系统作为配置适配器运行,将人类可读的文本转换为 Caddy 的原生 JSON 配置格式。它位于用户输入和 Caddy 的核心配置系统之间。

配置管道中的 Caddyfile

来源: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

适配为 JSON 配置

HTTP Caddyfile 适配器将服务器块转换为 Caddy 的 JSON 配置。

来源:caddyconfig/httpcaddyfile/httptype.go56-87 caddyconfig/httpcaddyfile/httptype.go531-538

语法和结构

服务器块结构

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 组装

适配过程通过组装完整的 JSON 格式 Caddy 配置结束。

来源:caddyconfig/httpcaddyfile/httptype.go269-362 caddyconfig/httpcaddyfile/httptype.go202-223