地勘网站建设方案,自助建网站系统,网站开发费用的会计分录,创建app平台引言 “Every site on HTTPS” 这是「一天一个开源项目」系列的第 46 篇文章。今天介绍的项目是 Caddy#xff08;GitHub#xff09;。 还在为配置 HTTPS 证书而烦恼#xff1f;还在使用 Nginx 或 Apache 的复杂配置#xff1f;Caddy 是一个用 Go 编写的快速、可扩展的多平…引言“Every site on HTTPS”这是「一天一个开源项目」系列的第 46 篇文章。今天介绍的项目是CaddyGitHub。还在为配置 HTTPS 证书而烦恼还在使用 Nginx 或 Apache 的复杂配置Caddy是一个用Go编写的快速、可扩展的多平台 Web 服务器默认自动 HTTPS支持HTTP/1.1、HTTP/2、HTTP/3零配置即可使用适合生产环境。自 2014 年发布以来已服务数万亿 HTTPS 请求管理数百万 TLS 证书是第一个默认使用 HTTPS 的 Web 服务器。为什么值得看自动 HTTPS默认启用自动管理 TLS 证书Let’s Encrypt、ZeroSSLHTTP/3 支持默认支持 HTTP/1.1、HTTP/2、HTTP/3⚡高性能Go 编写单二进制文件无外部依赖易配置Caddyfile 简单配置JSON API 动态配置️生产就绪已服务数万亿请求管理数百万证书高度可扩展模块化架构丰富的插件生态零依赖单静态二进制文件甚至不需要 libc你将学到什么Caddy 的核心特性自动 HTTPS、HTTP/3、反向代理Caddyfile 配置语法和 JSON API 配置与 Nginx、Apache 的对比和优势实际使用场景静态网站、反向代理、API 网关插件系统和扩展机制生产环境部署最佳实践前置知识了解 Web 服务器基本概念HTTP、HTTPS、反向代理对 TLS/SSL 证书有基本了解了解 Go 语言可选用于理解实现对 Nginx 或 Apache 有使用经验可选便于对比项目背景项目简介Caddy是一个用Go编写的快速、可扩展的多平台 Web 服务器最突出的特点是默认自动 HTTPS。它是第一个默认使用 HTTPS 的 Web 服务器让 HTTPS 成为标准而非选项。核心特点自动 HTTPS默认启用自动从 Let’s Encrypt 或 ZeroSSL 获取证书HTTP/3 支持默认支持 HTTP/1.1、HTTP/2、HTTP/3零配置最简单的配置即可运行高性能Go 编写单二进制文件无外部依赖生产就绪已服务数万亿请求管理数百万证书高度可扩展模块化架构丰富的插件生态动态配置支持 JSON API 在线配置更改多平台支持 Linux、macOS、Windows解决的核心问题HTTPS 配置复杂证书管理繁琐传统 Web 服务器配置复杂学习曲线陡峭HTTP/3 支持需要额外配置证书过期导致服务中断多站点管理复杂面向的用户需要快速部署 HTTPS 网站的开发者需要简化 Web 服务器配置的运维人员需要 HTTP/3 支持的应用需要反向代理和负载均衡的团队希望零配置使用 HTTPS 的个人开发者作者/团队介绍作者Matthew Holtmholt6背景2014 年在杨百翰大学学习计算机科学时开始开发 Caddy理念让 HTTPS 成为标准简化 Web 服务器配置项目归属ZeroSSLHID Global 公司的项目社区数百名贡献者活跃的社区支持项目名称由来“Caddy” 这个名字的由来是因为这个软件帮助处理 Web 服务的繁琐、平凡任务也是多个东西组织在一起的单一场所就像高尔夫球童 caddy 一样。项目数据⭐GitHub Stars: 70.8kForks: 4.7k版本: v2.11.2持续更新中2,505 commitsLicense: Apache-2.0官网: caddyserver.com文档: caddyserver.com/docs社区: caddy.communityIssues: GitHub Issues技术栈语言: Go97.9%核心特性: HTTP/1.1、HTTP/2、HTTP/3、TLS、自动证书管理依赖: CertMagic自动证书管理库平台: Linux、macOS、Windows重要里程碑2014 年项目启动第一个默认 HTTPS 的 Web 服务器2020 年Caddy 2.0 发布完全重写2021 年Caddy 2.6 默认启用 HTTP/3至今已服务数万亿 HTTPS 请求管理数百万证书主要功能核心作用Caddy 的核心作用是提供一个现代化、易用的 Web 服务器让开发者能够零配置 HTTPS自动获取和管理 TLS 证书高性能服务支持 HTTP/1.1、HTTP/2、HTTP/3反向代理灵活的反向代理和负载均衡静态文件服务高效的静态文件服务器动态配置通过 JSON API 在线更改配置多站点管理轻松管理数百个站点插件扩展丰富的插件生态使用场景静态网站托管个人博客、文档网站单页应用SPA部署静态资源 CDN反向代理微服务 API 网关负载均衡服务发现集成开发环境本地 HTTPS 开发自动证书管理快速原型部署生产环境高可用 Web 服务多站点管理自动证书续期容器化部署Docker 容器Kubernetes Ingress云原生应用快速开始安装# macOSbrewinstallcaddy# Linux使用包管理器sudoaptinstall-ydebian-keyring debian-archive-keyring apt-transport-httpscurl-1sLfhttps://dl.cloudsmith.io/public/caddy/stable/gpg.key|sudogpg--dearmor-o/usr/share/keyrings/caddy-stable-archive-keyring.gpgcurl-1sLfhttps://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt|sudotee/etc/apt/sources.list.d/caddy-stable.listsudoaptupdatesudoaptinstallcaddy# 或直接下载二进制文件wgethttps://github.com/caddyserver/caddy/releases/latest/download/caddy_2.11.2_linux_amd64.tar.gztar-xzfcaddy_2.11.2_linux_amd64.tar.gzsudomvcaddy /usr/local/bin/最简单的配置Caddyfile# 自动 HTTPS零配置 localhost respond Hello, Caddy!运行# 使用 Caddyfilecaddy run# 或指定配置文件caddy run--configCaddyfile# 后台运行caddy start--configCaddyfile访问HTTP: http://localhost:2015HTTPS: https://localhost自动证书反向代理示例example.com { reverse_proxy localhost:8080 }静态文件服务example.com { root * /var/www/html file_server }核心特性自动 HTTPS默认启用 HTTPS自动从 Let’s Encrypt 或 ZeroSSL 获取证书自动续期无需手动管理支持内部名称和 IP 的本地 CA多证书颁发机构回退HTTP/3 支持默认支持 HTTP/1.1、HTTP/2、HTTP/3基于 QUIC 协议自动降级UDP 不可用时回退到 HTTP/2向后兼容灵活的配置Caddyfile简单易读的配置语法JSON API原生 JSON 配置动态更新配置适配器支持 YAML、TOML、NGINX 配置格式在线配置更改无需重启优雅重载反向代理灵活的路由规则负载均衡轮询、最少连接、IP 哈希等健康检查服务发现集成Consul、Kubernetes 等WebSocket 支持静态文件服务高效的文件服务器目录浏览文件压缩gzip、brotli缓存控制范围请求支持安全特性TLS 1.3 支持OCSP StaplingHSTS 支持安全头部自动设置防止 TLS/OCSP/证书相关问题导致服务中断可扩展性模块化架构丰富的插件生态自定义中间件插件热加载生产就绪已服务数万亿请求管理数百万证书支持数十万站点高可用性设计完善的监控和日志项目优势对比项CaddyNginxApacheHTTPS 配置✅ 自动零配置⚠️ 需手动配置证书⚠️ 需手动配置证书HTTP/3 支持✅ 默认启用⚠️ 需额外模块⚠️ 需额外模块配置复杂度✅ Caddyfile 简单⚠️ 配置文件复杂⚠️ 配置文件复杂动态配置✅ JSON API无需重启⚠️ 需重载配置⚠️ 需重载配置证书管理✅ 自动续期❌ 需手动管理❌ 需手动管理性能✅ Go 编写高性能✅ C 编写高性能⚠️ 进程模型性能一般内存安全✅ Go 内存安全保证⚠️ C 语言需注意⚠️ C 语言需注意依赖✅ 单二进制无依赖⚠️ 需系统库⚠️ 需系统库学习曲线✅ 简单快速上手⚠️ 陡峭⚠️ 陡峭插件生态✅ 丰富的插件✅ 丰富的模块✅ 丰富的模块为什么选择 Caddy零配置 HTTPS自动获取和管理证书无需手动操作现代化协议默认支持 HTTP/3面向未来简单配置Caddyfile 语法简单JSON API 灵活生产就绪已服务数万亿请求管理数百万证书高度可扩展模块化架构丰富的插件生态单二进制无外部依赖易于部署内存安全Go 语言编写内存安全保证项目详细剖析架构设计Caddy 采用模块化、可扩展的架构设计基于 Go 语言通过模块系统实现功能扩展。核心组件Caddy ├── HTTP AppHTTP 服务器 │ ├── HTTP/1.1 支持 │ ├── HTTP/2 支持 │ └── HTTP/3 支持QUIC ├── TLS AppTLS 管理 │ ├── 自动证书获取CertMagic │ ├── 证书续期 │ └── OCSP Stapling ├── 反向代理模块 │ ├── 路由规则 │ ├── 负载均衡 │ └── 健康检查 ├── 静态文件服务器 ├── 中间件系统 │ ├── 认证 │ ├── 压缩 │ ├── 日志 │ └── 缓存 └── 配置系统 ├── Caddyfile 解析器 ├── JSON API └── 配置适配器设计理念默认安全HTTPS 默认启用安全优先零配置最简单的配置即可运行模块化功能通过模块实现易于扩展动态配置支持在线配置更改无需重启单二进制无外部依赖易于部署自动 HTTPS 实现Caddy 的自动 HTTPS 功能基于CertMagic库实现支持多种证书颁发机构。工作流程1. 首次请求 HTTPS ↓ 2. 检查本地是否有有效证书 ↓ 3. 如果没有向 Lets Encrypt 或 ZeroSSL 申请 ↓ 4. 完成 ACME 挑战HTTP-01、DNS-01、TLS-ALPN-01 ↓ 5. 获取证书并存储 ↓ 6. 自动续期证书到期前 30 天支持的证书颁发机构Let’s Encrypt公开域名ZeroSSL公开域名本地 CA内部名称和 IP自定义 CA支持自定义证书颁发机构ACME 挑战类型HTTP-01通过 HTTP 验证域名所有权DNS-01通过 DNS 记录验证TLS-ALPN-01通过 TLS 握手验证配置示例# 自动 HTTPS默认 example.com { respond Hello, HTTPS! } # 使用特定邮箱Lets Encrypt example.com { email adminexample.com respond Hello, HTTPS! } # 禁用自动 HTTPS example.com { http_only respond Hello, HTTP! }HTTP/3 支持Caddy 2.6 默认启用 HTTP/3 支持基于 QUIC 协议。HTTP/3 特性基于 QUIC使用 UDP 传输而非 TCP多路复用无队头阻塞连接迁移IP 地址变化时保持连接0-RTT快速建立连接自动降级HTTP/3 (QUIC/UDP) ↓ (UDP 不可用) HTTP/2 (TCP) ↓ (HTTP/2 不可用) HTTP/1.1 (TCP)配置# HTTP/3 默认启用无需配置 example.com { respond Hello, HTTP/3! } # 显式启用 HTTP/3 example.com { protocols h1 h2 h3 respond Hello, HTTP/3! } # 禁用 HTTP/3 example.com { protocols h1 h2 respond Hello, HTTP/2! }配置系统Caddy 支持多种配置方式从简单的 Caddyfile 到灵活的 JSON API。Caddyfile 语法# 全局选项 { email adminexample.com admin localhost:2019 } # 站点配置 example.com { # 反向代理 reverse_proxy localhost:8080 # 静态文件 root * /var/www/html file_server # 日志 log { output file /var/log/caddy/access.log } # 压缩 encode gzip zstd # 安全头部 header { Strict-Transport-Security max-age31536000; X-Content-Type-Options nosniff } }JSON API 配置{apps:{http:{servers:{srv0:{listen:[:443],routes:[{match:[{host:[example.com]}],handle:[{handler:reverse_proxy,upstreams:[{dial:localhost:8080}]}]}]}}},tls:{automation:{policies:[{subjects:[example.com],issuers:[{module:acme,email:adminexample.com}]}]}}}}动态配置# 通过 API 加载配置curl-XPOST http://localhost:2019/load\-HContent-Type: application/json\-dconfig.json# 获取当前配置curlhttp://localhost:2019/config/# 更新配置curl-XPATCH http://localhost:2019/config/\-HContent-Type: application/json\-d{apps:{http:{servers:{srv0:{listen:[:443]}}}}}反向代理功能Caddy 的反向代理功能非常强大支持负载均衡、健康检查、服务发现等。基本反向代理example.com { reverse_proxy localhost:8080 }负载均衡example.com { reverse_proxy localhost:8080 localhost:8081 localhost:8082 { # 负载均衡策略 lb_policy least_conn # 最少连接 # lb_policy round_robin # 轮询默认 # lb_policy ip_hash # IP 哈希 # lb_policy first # 第一个可用 # 健康检查 health_uri /health health_interval 10s health_timeout 5s # 故障转移 fail_duration 30s max_fails 3 unhealthy_status 500 502 503 } }WebSocket 支持example.com { reverse_proxy /ws localhost:8080 { # WebSocket 升级 header_up Connection Upgrade header_up Upgrade websocket } }服务发现example.com { reverse_proxy consul://service-name # 或 reverse_proxy kubernetes://service-name:8080 }插件系统Caddy 的插件系统非常灵活可以通过模块扩展功能。内置模块httpHTTP 服务器tlsTLS 管理reverse_proxy反向代理file_server静态文件服务器encode压缩log日志headerHTTP 头部操作第三方插件caddy-dns/cloudflareCloudflare DNS 挑战caddy-dns/route53AWS Route53 DNS 挑战caddy-auth-portal认证门户caddy-rate-limit速率限制caddy-cacheHTTP 缓存使用插件# 使用 xcaddy 构建带插件的 Caddyxcaddy build\--withgithub.com/caddy-dns/cloudflare\--withgithub.com/mholt/caddy-ratelimit性能优化Caddy 的性能优化主要体现在Go 语言优势编译型语言性能接近 C单二进制无外部依赖启动快速并发模型Go 的 goroutine 实现高并发内存管理Go 的 GC 自动管理内存零拷贝减少数据拷贝提高性能性能对比参考数据吞吐量与 Nginx 相当内存占用略高于 Nginx但可接受CPU 使用与 Nginx 相当启动时间比 Nginx 快项目地址与资源官方资源GitHub: github.com/caddyserver/caddy文档: caddyserver.com/docs社区论坛: caddy.communityIssue Tracker: GitHub Issues下载: GitHub Releases官网: caddyserver.com相关资源CertMagic自动证书管理库 - github.com/caddilicious/certmagicxcaddyCaddy 构建工具 - github.com/caddyserver/xcaddyCaddy 插件列表caddyserver.com/docs/modulesCaddyfile 语法caddyserver.com/docs/caddyfileJSON API 文档caddyserver.com/docs/api适用人群Web 开发者需要快速部署 HTTPS 网站运维工程师需要简化 Web 服务器配置DevOps 工程师需要现代化的反向代理和负载均衡个人开发者需要零配置 HTTPS 开发环境企业团队需要生产级 Web 服务器支持多站点管理欢迎来我中的个人主页找到更多有用的知识和有趣的产品