一个
项目
每个 HTTPS 站点
Caddy 是一个可扩展的服务器平台,默认使用 TLS。
菜单
功能
- 通过 Caddyfile 实现易于配置
- 通过其原生 JSON 配置实现强大的配置
- 通过 JSON API 实现动态配置
- 如果您不喜欢 JSON,可以使用配置适配器
- 默认启用自动 HTTPS
- 为公共域名提供 ZeroSSL 和 Let's Encrypt
- 为内部域名和 IP 提供完全托管的本地 CA
- 可以与集群中的其他 Caddy 实例进行协调
- 多颁发机构回退
- 支持 Encrypted ClientHello (ECH)
- 当其他服务器因 TLS/OCSP/证书相关问题而宕机时,保持运行
- 在提供数万亿次请求并管理数百万个 TLS 证书后,达到生产就绪状态
- 经过生产环境验证,可扩展至数十万个站点
- 默认支持 HTTP/1.1、HTTP/2 和 HTTP/3
- 高度可扩展的模块化架构让 Caddy 在不臃肿的情况下实现任何功能
- 随处运行且无外部依赖(甚至不需要 libc)
- 使用 Go 编写,这是一种比其他服务器具有更高内存安全保证的语言
- 实际上使用起来很有趣
- 还有更多内容可供探索
安装
最简单、跨平台的入门方式是下载 Caddy 的 GitHub Releases 并将可执行文件放入您的 PATH 中。
请参阅我们的在线文档以获取其他安装说明。
从源码构建
要求:
用于开发
注意: 这些步骤不会嵌入正确的版本信息。为此,请遵循下一节中的说明。
$ git clone "https://github.com/caddyserver/caddy.git"
$ cd caddy/cmd/caddy/
$ go build
运行 Caddy 时,除非在配置中另有指定,否则它可能会尝试绑定低端口。如果您的操作系统需要提升权限才能执行此操作,您需要授予新二进制文件相应的权限。在 Linux 上,可以轻松地通过以下方式完成:sudo setcap cap_net_bind_service=+ep ./caddy
如果您更喜欢使用仅创建临时二进制文件的 go run,您仍然可以使用包含的 setcap.sh 以如下方式完成:
$ go run -exec ./setcap.sh main.go
如果你不想为 setcap 输入密码,请使用 sudo visudo 编辑你的 sudoers 文件,并允许你的用户账户无需密码即可运行该命令,例如:
username ALL=(ALL:ALL) NOPASSWD: /usr/sbin/setcap
将 username 替换为您的实际用户名。请务必谨慎,仅在您清楚自己在做什么的情况下执行此操作!我们仅具备记录如何使用 Caddy 的资质,而不涉及 Go 工具链或您的计算机,我们提供这些说明仅出于方便;请自行学习如何使用您的计算机,并自行承担风险,进行任何必要的调整。
然后,您可以运行所有模块或特定模块中的测试:
$ go test ./...
$ go test ./modules/caddyhttp/tracing/
包含版本信息和/或插件
使用我们的构建工具,xcaddy...
$ xcaddy build
...以下步骤是自动化的:
- Create a new folder:
mkdir caddy - Change into it:
cd caddy - Copy Caddy's main.go into the empty folder. Add imports for any custom plugins you want to add.
- Initialize a Go module:
go mod init caddy - (Optional) Pin Caddy version:
go get github.com/caddyserver/caddy/v2@versionreplacingversionwith a git tag, commit, or branch name. - (Optional) Add plugins by adding their import:
_ "import/path/here" - Compile:
go build -tags=nobadger,nomysql,nopgx
快速入门
Caddy 网站 提供了包含教程、快速入门指南、参考文档等内容的文档。
我们建议所有用户 -- 无论经验水平如何 -- 都完成我们的 入门指南,以熟悉 Caddy 的使用方法。
如果你只有一分钟时间,网站上有几个快速入门教程 可供选择!不过,在完成快速入门教程后,请阅读更多文档以了解软件的工作原理。🙂
概述
Caddy 最常用作 HTTPS 服务器,但它适用于任何长期运行的 Go 程序。首先,它是一个运行 Go 应用程序的平台。Caddy "apps" 只是实现为 Caddy 模块的 Go 程序。两个 apps -- tls 和 http -- 随 Caddy 标准发行。
Caddy 应用可立即受益于自动化文档、通过 API 进行的优雅在线配置更改,以及与其他 Caddy 应用的统一。
尽管 JSON 是 Caddy 的原生配置语言,但 Caddy 可以接受来自 配置适配器 的输入,这些适配器基本上可以将您选择的任何配置格式转换为 JSON:Caddyfile、JSON 5、YAML、TOML、NGINX 配置等。
配置 Caddy 的主要方式是通过 其 API,但如果您更喜欢使用配置文件,命令行界面 也支持这些文件。
与现存的任何 Web 服务器相比,Caddy 提供了前所未有的控制级别。在 Caddy 中,您通常是在设置内存中初始化类型的实际值,这些值驱动着从您的 HTTP 处理器和 TLS 握手到存储介质的所有内容。Caddy 还具有极其强大的可扩展性,其强大的插件系统使其相比其他 Web 服务器有了巨大的改进。
要驾驭这种设计的强大功能,您需要了解配置文档的结构。请参阅 我们的文档站点 以获取有关 Caddy 配置结构 的详细信息。
Caddy 的几乎所有配置都包含在单个配置文档中,而不是像其他 Web 服务器那样分散在 CLI 标志、环境变量和配置文件中。这使得管理您的服务器配置更加简单,并减少了隐藏变量/因素。
完整文档
我们的网站拥有完整的文档:
文档也是开源的。您可以在此处做出贡献:https://github.com/caddyserver/website
获取帮助
-
我们建议 Caddy 用户通过 Ardan Labs 在需要帮助之前签订支持合同。
-
赞助 意义重大!我们可以为赞助商提供私人帮助。如果 Caddy 正在为您的公司带来收益,请考虑赞助。这不仅有助于资助全职工作以确保项目的长期发展,还能为您的公司提供所需的资源、支持和折扣;同时,这对您的客户和潜在客户来说也是您公司形象的一大加分项!
-
个人可以在我们的社区论坛 https://caddy.community 上免费互助。请记住,人们是利用业余时间和善意提供帮助的。获得帮助的最佳方式是先提供帮助!
请仅将我们的 issue tracker 用于 bug 报告和功能请求,即可执行的开发项目(支持问题通常会被引导至论坛)。
关于
Matthew Holt 于 2014 年在杨百翰大学学习计算机科学期间开始开发 Caddy。(“Caddy” 这个名字的由来是因为该软件有助于处理 Web 服务中繁琐、单调的任务,同时也是将多种事物组织在一起的一个单一位置。)它很快成为第一个自动且默认使用 HTTPS 的 Web 服务器,如今拥有数百名贡献者,并已处理了数万亿次 HTTPS 请求。
“Caddy” 名称受商标保护。 该软件的名称是 “Caddy”,而非 “Caddy Server” 或 “CaddyServer”。请将其称为 “Caddy”,或者,如果您希望加以澄清,可称为 “Caddy web server”。Caddy 是 Stack Holdings GmbH 的注册商标。
- X 上的项目:@caddyserver
- X 上的作者:@mholt6
Caddy 是 ZeroSSL 的项目,ZeroSSL 是 HID Global 旗下公司。
Debian 软件包仓库托管由 Cloudsmith 慷慨提供。Cloudsmith 是唯一完全托管、云原生的通用软件包管理解决方案,使您的组织能够以任意格式、在任何位置创建、存储和共享软件包,并拥有完全的信任。