首页 > 其他分享 >caddy 模块(module) caddyhttp Start启动逻辑分析

caddy 模块(module) caddyhttp Start启动逻辑分析

时间:2024-06-22 13:53:45浏览次数:12  
标签:caddyhttp TLS HTTP 配置 caddy module srv 服务器 日志

 

./modules/caddyhttp/app.go

func (app *App) Start() error {
    // xx
}

 

Start 方法属于一个自定义的 App 结构体,用于启动应用程序中的多个 HTTP 服务器实例。

下面是对该方法的主要逻辑和关键步骤的详细分析:

1. 日志设置:

  首先,通过 zap.NewStdLogAt 创建一个兼容 http.Server 的日志记录器,级别设为 DebugLevel,用于记录服务器日志。

 

2. 服务器配置循环:

  使用 range 遍历 app.Servers,对每个服务器(srv)进行配置。

  创建 http.Server 实例,并根据 srv 配置项设置读写超时、最大头大小、处理器(Handler)、错误日志、连接上下文等。

  根据服务器配置决定是否启用 HTTP/2 (h2),如果禁用,则清除与 HTTP/2 相关的配置;如果启用,则使用 http2.ConfigureServer 配置 HTTP/2 服务器。

 

3. TLS配置与监听地址处理:

  从 srv.TLSConnPolicies 获取 TLS 配置,并应用到服务器。

  遍历 srv.Listen 中的每个监听地址,解析地址,创建监听器,并考虑端口范围。

  根据配置动态开启或关闭 TLS 支持,以及 HTTP/3 (h3)支持。

  对监听器应用一系列包装器(listenerWrappers),这些包装器可以包括 TLS 包装、HTTP/2 特定的包装等,以增强或修改基础网络行为。

 

4. 协议支持与启动服务:

  根据服务器支持的协议(h1, h2c, h3),决定如何最终配置服务器的处理器(例如,使用 HTTP/2 的 h2c 处理器)。

  对于每个监听器,如果配置了 HTTP/1 (h1),则启动一个新的 goroutine 来运行 http.Server.Serve(ln),监听并处理请求。

 

5. 自动 HTTPS 和日志记录:

  在所有服务器配置完毕后,调用 app.automaticHTTPSPhase2() 完成自动 HTTPS 证书管理的第二阶段。
  最后,记录每个服务器已启动的信息,包括名称和所支持的协议。


整体而言,这个方法非常详尽地处理了 HTTP 服务器的配置与启动流程,包括对不同协议的支持、TLS加密、HTTP/2和HTTP/3的特殊处理,以及日志和错误管理,展示了高度灵活和可配置的服务器管理逻辑。

 

Link:https://www.cnblogs.com/farwish/p/18259674

标签:caddyhttp,TLS,HTTP,配置,caddy,module,srv,服务器,日志
From: https://www.cnblogs.com/farwish/p/18259674

相关文章

  • 【YOLOv8改进】CAFM(Convolution and Attention Fusion Module):卷积和注意力融合模块
    摘要摘要——高光谱图像(HSI)去噪对于高光谱数据的有效分析和解释至关重要。然而,同时建模全局和局部特征以增强HSI去噪的研究却很少。在本文中,我们提出了一种混合卷积和注意力网络(HCANet),该网络结合了卷积神经网络(CNN)和Transformers的优势。为了增强全局和局部特征的建模,我们设计了......
  • ModuleNotFoundError: No module named 'gi'
    ForDebian/Ubuntu-basedLinuxdistributions,youcaninstallitviatheterminalwith:bash sudoapt-getinstallpython3-gibashpipinstallPyGObject$python3frames_into_pytorch.pyTraceback(mostrecentcalllast):File"frame......
  • nginx增加 nginx-vod-module模块实现MP4视频点播
    一、安装Nginx需要提前以预编译方式安装好Nginx具体安装步骤点击下面链接:预编译方式安装nginx二、下载nginx-vod-module模块nginx-vod-module模块是基于nginx来提供VOD(videoondemand)服务的第三方模块,它支持基于DASH、HDS、HLS、MSS的点播服务搭建。nginx-vod-module下......
  • QtCreator CMakeLists.txt添加模块(Modules)
    修改以下位置,添加模块...set(CMAKE_CXX_STANDARD20)#设置C++标准#查找Qt6find_package(QTNAMESQt6Qt5REQUIREDCOMPONENTSWidgets**Multimedia**)find_package(Qt${QT_VERSION_MAJOR}REQUIREDCOMPONENTSWidgets**Multimedia**)...#链接Qt6模块和库target_l......
  • git submodule小记
    这是一篇记录gitsubmodule中存在的坑的文档引用一个模块的命令gitsubmoduleaddhttp://your-submodule-url.com/local/path这个命令可以将一个子模块添加到当前的主仓库中(注意,这样添加的是最新版的) 这个gitsubmodule有一些坑爹的地方当你本地添加了一个子模块后,一旦......
  • caddy run 命令详解
     caddyrun这个子命令启动Caddy进程,并可选地使用初始配置文件进行引导,并无限期地阻塞,直到服务器停止运行,即run是在"守护进程"模式(前台)中运行Caddy。使用参数:[--config<path>[--adapter<name>]][--envfile<path>][--environ][--resume][--watch][--pidfile<......
  • caddy 服务器的 Docker 镜像构建流程
     构建一个包含Caddy服务器的Docker镜像,关键部分:https://github.com/caddyserver/caddy-docker/blob/master/Dockerfile.tmpl这个Dockerfile精心设计,用于自动化构建一个包含最新版CaddyWeb服务器的Docker镜像,支持自动HTTPS,并配置了基本的文件结构和执行环境。 1.......
  • 从零手写实现 nginx-21-modules 模块
    前言大家好,我是老马。很高兴遇到你。我们为java开发者实现了java版本的nginxhttps://github.com/houbb/nginx4j如果你想知道servlet如何处理的,可以参考我的另一个项目:手写从零实现简易版tomcatminicat手写nginx系列如果你对nginx原理感兴趣,可以阅读:从零......
  • caddy 入口 rootCmd 概览
     $goruncmd/caddy/main.go cmd/caddy/main.go(空壳) ->cmd/main.go (注册rootCmd) ->cmd/cobra.go (rootCmd实现) 以下是rootCmd中对Caddy的描述信息:Caddy是一个用Go语言编写的可扩展服务器平台,以其易用性和多功能性而著称。它核......
  • mybatis-plus加载多个module的mapper踩坑记录
    背景 有一个多模块的项目,每个模块中都有自己的mapper.xml文件。但是在执行一次SQL查询中,mybatis却报出了下面的异常 排查过程第一步,先检查mapper扫描是否正确 先找到这个方法的位置 可以看到包名是com.pinming.security.responsibility.mapper 检查SpringBoot......