菜单

适配器系统

相关源文件

适配器系统负责将 Caddyfile 配置转换为 Caddy 的内部 JSON 配置格式。该系统弥合了人类可读的 Caddyfile 语法与 Caddy 核心内部使用的结构化 JSON 配置之间的差距。

有关 Caddyfile 解析和词法分析的信息,请参阅解析和处理。有关单个 Caddyfile 指令的详细信息,请参阅指令

概述

适配器系统通过以下方式将 Caddyfile 服务器块转换为完整的 Caddy 配置:

  1. 处理全局选项和服务器块
  2. 将指令转换为配置值
  3. 构建应用程序配置(HTTP、TLS、PKI)
  4. 组装最终的 JSON 结构

核心组件

ServerType

caddyconfig/httpcaddyfile/httptype.go54中的ServerType结构体是协调整个转换过程的主要适配器实现。

适配器架构概述

来源:caddyconfig/httpcaddyfile/httptype.go57-363

Setup 方法

caddyconfig/httpcaddyfile/httptype.go57-363中的Setup方法是适配过程的主要入口点。

Setup 方法流程

来源:caddyconfig/httpcaddyfile/httptype.go57-186

指令系统

指令注册

指令的注册使用两个主要函数,它们决定了指令如何处理配置

功能目的用途
RegisterDirective通用指令注册返回多个 ConfigValue 对象
RegisterHandlerDirectiveHTTP 处理程序注册返回单个 MiddlewareHandler,自动包装在路由中

指令注册系统

来源:caddyconfig/httpcaddyfile/directives.go109-138

辅助类型

caddyconfig/httpcaddyfile/directives.go201-211中的Helper结构体提供了指令函数的实用工具。

  • Dispenser:访问 Caddyfile 令牌
  • State:适配过程中的中间变量
  • MatcherDefs:命名匹配器定义
  • Options:全局配置选项
  • Warnings:适配警告集合

配置值处理

ConfigValue 结构

caddyconfig/httpcaddyfile/directives.go420-435中的ConfigValue结构体代表了适配过程中的中间配置。

服务器块处理

每个服务器块都会将 ConfigValue 对象按类别收集到一个“堆”中。

服务器块配置处理

来源:caddyconfig/httpcaddyfile/httptype.go76-172caddyconfig/httpcaddyfile/directives.go536-540

应用程序配置构建

HTTP 应用程序

HTTP 应用程序是根据 caddyconfig/httpcaddyfile/httptype.go531-986中处理的服务器块构建而成。

  1. 服务器创建:从地址对生成 caddyhttp.Server 实例
  2. 路由编译:将指令路由转换为 HTTP 路由处理程序
  3. 匹配器处理:将请求匹配器应用于路由
  4. 自动 HTTPS 集成:配置自动 HTTPS 行为

TLS 应用程序

caddyconfig/httpcaddyfile/tlsapp.go36-535处理 TLS 配置生成。

  1. 自动化策略:证书颁发和续订策略
  2. 连接策略:TLS 握手配置
  3. 证书加载器:手动加载证书
  4. ACME 集成:自动证书管理

TLS 应用程序构建过程

来源:caddyconfig/httpcaddyfile/tlsapp.go36-535

全局选项处理

全局选项在服务器块之前进行处理,并影响整个配置

选项类别示例处理函数
网络http_porthttps_portdefault_bindparseOptHTTPPortparseOptHTTPSPort
TLSacme_caemailcert_issuerparseOptSingleStringparseOptCertIssuer
管理员adminparseOptAdmin
存储storageparseOptStorage

来源:caddyconfig/httpcaddyfile/options.go32-68caddyconfig/httpcaddyfile/httptype.go369-454

命名路由

命名路由允许在多个位置重用指令

命名路由系统

来源:caddyconfig/httpcaddyfile/httptype.go456-529caddyconfig/httpcaddyfile/builtins.go868-887

地址映射和合并

适配器按监听地址对服务器块进行分组,以创建高效的服务器配置

  1. 地址解析:将 Caddyfile 键转换为 Address 对象
  2. 协议关联:将地址映射到支持的协议
  3. 服务器块分组:合并共享监听地址的服务器块
  4. 冲突检测:识别模棱两可的配置

来源:caddyconfig/httpcaddyfile/httptype.go174-186caddyconfig/httpcaddyfile/addresses.go

内置指令

核心指令在 caddyconfig/httpcaddyfile/builtins.go38-56中定义。

  • bind:网络监听器配置
  • tls:TLS 连接和证书设置
  • root:文件服务的文档根目录
  • redir:HTTP 重定向
  • respond:静态响应
  • route:路由分组
  • log:访问日志配置

每个指令都有一个专用的解析函数,返回适当的 ConfigValue 对象。

来源:caddyconfig/httpcaddyfile/builtins.go38-1181