Caddy:默认自动 HTTPS 的 Web 服务器
用 Go 编写的可扩展多平台 Web 服务器,默认启用 HTTPS,可作为 HTTPS 服务器与反向代理使用。
- 浏览
- 4
- 访问
- 0
- 下载
- 0
- 版本
- v2.11.7
- 平台
- Windows、macOS、Linux
详细介绍
项目简介
Caddy 是一个可扩展的服务器平台,默认使用 TLS,目标是「让每个站点都跑在 HTTPS 上」。它由 Go 编写,常见用途是 HTTPS 服务器,但同样适合任何长时间运行的 Go 程序。
Caddy 首先是一个运行 Go 应用的平台:Caddy 的「app」就是实现为 Caddy 模块的 Go 程序,其中 tls 与 http 两个 app 随 Caddy 一起发布。这些 app 可以直接获得自动生成的文档、通过 API 在线优雅修改配置等能力。
Caddy 已服务过数万亿次请求、管理过数百万张 TLS 证书,可扩展到数十万个站点。
主要功能
- 简单配置:使用 Caddyfile 轻松配置
- 强大配置:使用原生 JSON 配置
- 动态配置:通过 JSON API 在线修改配置
- 配置适配器:不喜欢 JSON 时,可把 Caddyfile、JSON 5、YAML、TOML、NGINX 配置等格式转换为 JSON
- 默认自动 HTTPS
- 公共域名使用 ZeroSSL 与 Let's Encrypt
- 内部名称与 IP 使用完全托管的本地 CA
- 可与集群中的其他 Caddy 实例协调
- 多签发者回退
- 支持 Encrypted ClientHello(ECH)
- 在其他服务器因 TLS/OCSP/证书问题下线时仍能保持在线
- 默认支持 HTTP/1.1、HTTP/2、HTTP/3
- 高度可扩展的模块化架构,可插拔地实现各种功能而不会臃肿
- 随处运行、无外部依赖(连 libc 都不需要)
- 用 Go 编写,具备更高的内存安全保证
几乎所有的配置都集中在一个配置文档中,而不是分散在命令行参数、环境变量和配置文件中,便于管理并减少隐藏变量。
安装与使用
最简单的跨平台方式是从 GitHub Releases 下载 Caddy,并把可执行文件放入 PATH。其他安装方式见在线文档。
从源码构建需要 Go 1.26.0 或更新版本。
开发构建(不会嵌入正确的版本信息):
$ git clone "https://github.com/caddyserver/caddy.git"
$ cd caddy/cmd/caddy/
$ go build
运行时可能尝试绑定低端口,如果操作系统要求提权,可在 Linux 上执行:
sudo setcap cap_net_bind_service=+ep ./caddy
若想用 go run 只生成临时二进制,也可配合仓库自带的 setcap.sh:
$ go run -exec ./setcap.sh main.go
使用构建工具 xcaddy 构建带版本信息和插件的版本:
$ xcaddy build
运行测试(全部模块或指定模块):
$ go test ./...
$ go test ./modules/caddyhttp/tracing/
快速上手请参考官方 Getting Started 指南,以及若干快速入门教程。
注意事项
- 运行 Caddy 可能需要绑定低端口的权限。README 中给出的
setcap免密 sudoers 配置仅为方便说明,操作需谨慎、风险自负。 - 无论经验多少,官方都建议先完成 Getting Started 指南,并继续阅读文档以理解软件的工作方式。
- 完整文档:https://caddyserver.com/docs/ (文档本身也开源:https://github.com/caddyserver/website )
- 社区论坛可免费交流求助:https://caddy.community
- Issue tracker 仅用于 bug 报告与功能请求,使用类问题通常会被引导到论坛。
本作品整理自 GitHub 开源项目 caddyserver/caddy,原作者 @caddyserver,许可证 Apache-2.0。中文介绍由 AI 根据项目 README 整理,以原仓库为准。
更新记录
- v2.11.7当前版本
修复 2.11.6 引入的空闲超时回归:HTTP/2 反向代理崩溃、带请求体的 HTTP/1.1 流式响应 60 秒后被切断、HTTP/2 静默流被重置;并新增对 Incremental 头字段(RFC 10036)的支持。
评论