菜单

监听器管理

相关源文件

本文档介绍了 Caddy 的网络监听器管理系统,该系统负责处理跨不同协议和网络类型的网络监听器的创建、配置和生命周期。监听器管理系统负责绑定到网络地址、管理监听器池以实现优雅重载,并为 Caddy 中的所有网络通信提供基础。

有关 HTTP 服务器配置和生命周期的信息,请参阅服务器生命周期。有关 TLS 连接处理的信息,请参阅连接策略。有关连接建立后的请求路由详情,请参阅请求路由

网络地址表示

Caddy 使用 NetworkAddress 结构体以统一的方式表示不同网络类型和协议的网络地址。

NetworkAddress 结构体支持各种网络类型和寻址方案。

网络类型地址示例目的
tcp, tcp4, tcp6tcp/localhost:8080HTTP/HTTPS 服务器
udp, udp4, udp6udp/localhost:8080HTTP/3 (QUIC) 服务器
unix, unixpacket, unixgramunix//var/run/caddy.sockUnix 域套接字
fd, fdgramfd/3基于文件描述符的监听器

来源:listeners.go41-59 listeners.go308-424

监听器创建与管理

Caddy 的监听器创建过程包括解析网络地址、检查插件提供的监听器以及根据网络协议创建适当的监听器类型。

监听器创建过程遵循以下顺序:

  1. 地址解析listeners.go316-374 将网络地址字符串解析成组件
  2. 插件检查listeners.go661-669 检查插件是否可以提供自定义监听器
  3. 标准创建listeners.go150-205 创建标准网络监听器
  4. 包装器应用:应用任何配置的监听器包装器以进行自定义

来源:135-148 150-205 modules/caddyhttp/app.go533-561

监听器池化与重用

Caddy 实现了复杂的监听器池系统,以实现在不中断连接的情况下优雅地重新加载配置。该系统允许在过渡期间,多个服务器实例共享相同的网络地址。

该池系统提供了多项关键优势:

  • 零停机重载:新配置可以绑定到与旧配置相同的地址
  • 资源效率:避免在过渡期间创建重复的监听器
  • 平台抽象:处理平台特定的套接字重用机制

来源:696-697 listeners.go135-139 listeners.go494-498

协议特定监听器处理

Caddy 的 HTTP 应用为每个服务器协调多个协议监听器,处理多协议支持的复杂性。

协议处理的关键方面:

来源:modules/caddyhttp/app.go532-594 modules/caddyhttp/app.go603-628 listeners.go433-492

监听器包装器

监听器包装器允许通过模块化系统修改监听器行为。HTTP 服务器支持可配置的监听器包装器,可以转换连接处理。

包装器系统提供了:

  • 模块化设计:每个包装器都实现了 caddy.ListenerWrapper 接口 listeners.go692-694
  • TLS 集成:特殊的 tlsPlaceholderWrapper 控制 TLS 定位 modules/caddyhttp/app.go342-361
  • 连接修改:包装器可以修改连接属性、添加监控等。

来源:modules/caddyhttp/server.go54-56 modules/caddyhttp/app.go333-362 listeners.go692-694

优雅关闭与清理

Caddy 实施了全面的关闭程序,以确保所有监听器和连接的干净终止。

关闭过程包括:

来源:modules/caddyhttp/app.go647-772 modules/caddyhttp/server.go680-685 listeners.go575-580