caddyserver/caddy

GitHub: caddyserver/caddy

一款用 Go 编写的现代化 Web 服务器,核心优势是开箱即用的自动 HTTPS 和极简配置。

Stars: 70496 | Forks: 4656

Caddy

a project


Every site on HTTPS

Caddy is an extensible server platform that uses TLS by default.

Releases · Documentation · Get Help

      @caddyserver on Twitter   Caddy Forum
Caddy on Sourcegraph   Cloudsmith

Powered by
CertMagic

### 菜单 - [功能特性](#features) - [安装](#install) - [从源码构建](#build-from-source) - [用于开发](#for-development) - [包含版本信息和/或插件](#with-version-information-andor-plugins) - [快速入门](#quick-start) - [概述](#overview) - [完整文档](#full-documentation) - [获取帮助](#getting-help) - [关于](#about) ## [功能特性](https://caddyserver.com/features) - 使用 [Caddyfile](https://caddyserver.com/docs/caddyfile) 实现**轻松配置** - 使用 [原生 JSON 配置](https://caddyserver.com/docs/json/)实现**强大配置** - 通过 [JSON API](https://caddyserver.com/docs/api) 实现**动态配置** - 如果您不喜欢 JSON,可以使用 [**配置适配器**](https://caddyserver.com/docs/config-adapters) - 默认开启 **自动 HTTPS** - 公共域名支持 [ZeroSSL](https://zerossl.com) 和 [Let's Encrypt](https://letsencrypt.org) - 为内部名称和 IP 提供完全管理的本地 CA - 可以与集群中的其他 Caddy 实例进行协调 - 多颁发者回退机制 - 支持 Encrypted ClientHello (ECH) - **当其他服务器因 TLS/OCSP/证书相关问题宕机时依然保持运行** - 在服务了数万亿请求和管理了数百万 TLS 证书后,已具备**生产就绪**能力 - **可扩展至数十万个站点**(已在生产环境中验证) - 默认支持 **HTTP/1.1、HTTP/2 和 HTTP/3** - **高度可扩展**的[模块化架构](https://caddyserver.com/docs/architecture)让 Caddy 能在不臃肿的情况下做任何事 - **随处运行**,且**无外部依赖**(甚至不需要 libc) - 使用 Go 语言编写,相比其他服务器具有更高的**内存安全保证** - 使用起来**真的很有趣** - 还有更多等你去[发现](https://caddyserver.com/features) ## 安装 最简单且跨平台的入门方式是从 [GitHub Releases](https://github.com/caddyserver/caddy/releases) 下载 Caddy,并将可执行文件放置在您的 PATH 中。 有关其他安装说明,请参阅[我们的在线文档](https://caddyserver.com/docs/install)。 ## 从源码构建 要求: - [Go 1.25.0 或更新版本](https://golang.org/dl/) ### 用于开发 _**注意:** 这些步骤[不会嵌入正确的版本信息](https://github.com/golang/go/issues/29228)。为此,请按照下一节的说明进行操作。_ ``` $ 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`](https://github.com/caddyserver/xcaddy)... ``` $ xcaddy build ``` ...以下步骤将自动执行: 1. 创建一个新文件夹:`mkdir caddy` 2. 进入该文件夹:`cd caddy` 3. 将 [Caddy 的 main.go](https://github.com/caddyserver/caddy/blob/master/cmd/caddy/main.go) 复制到空文件夹中。为您想添加的任何自定义插件添加导入。 4. 初始化一个 Go module:`go mod init caddy` 5. (可选)锁定 Caddy 版本:`go get github.com/caddyserver/caddy/v2@version`,将 `version` 替换为 git 标签、提交或分支名称。 6. (可选)通过添加插件的导入来添加插件:`_ "import/path/here"` 7. 编译:`go build -tags=nobadger,nomysql,nopgx` ## 快速入门 [Caddy 网站](https://caddyserver.com/docs/) 提供了包含教程、快速入门指南、参考等的文档。 **我们建议所有用户 —— 无论经验水平如何 —— 都阅读我们的 [入门指南](https://caddyserver.com/docs/getting-started) 以熟悉 Caddy 的使用。** 如果您只有一分钟时间,[网站上有多个快速入门教程](https://caddyserver.com/docs/quick-starts) 供您选择!但是,在完成快速入门教程后,请阅读更多文档以了解软件的工作原理。 🙂 ## 概述 Caddy 最常被用作 HTTPS 服务器,但它适用于任何长时间运行的 Go 程序。首先,它是一个运行 Go 应用程序的平台。Caddy “apps” 只是作为 Caddy 模块实现的 Go 程序。两个应用 —— `tls` 和 `http` —— 是 Caddy 的标准配置。 Caddy 应用程序可即时受益于[自动化文档](https://caddyserver.com/docs/json/)、通过 API 进行的优雅在线[配置更改](https://caddyserver.com/docs/api)以及与其他 Caddy 应用程序的统一。 尽管 [JSON](https://caddyserver.com/docs/json/) 是 Caddy 的原生配置语言,但 Caddy 可以接受来自[配置适配器](https://caddyserver.com/docs/config-adapters)的输入,这些适配器基本上可以将您选择的任何配置格式转换为 JSON:Caddyfile、JSON 5、YAML、TOML、NGINX 配置等。 配置 Caddy 的主要方式是通过 [其 API](https://caddyserver.com/docs/api),但如果您更喜欢配置文件,[命令行界面](https://caddyserver.com/docs/command-line) 也支持这些。 与现有的任何 Web 服务器相比,Caddy 提供了前所未有的控制水平。在 Caddy 中,您通常是在设置内存中已初始化类型的实际值,这些值驱动着从您的 HTTP 处理程序和 TLS 握手到您的存储介质的一切。Caddy 的可扩展性也非常惊人,其强大的插件系统比其他 Web 服务器有了巨大的改进。 要利用此设计的强大功能,您需要了解配置文档的结构。请参阅[我们的文档站点](https://caddyserver.com/docs/)以获取有关 [Caddy 配置结构](https://caddyserver.com/docs/json/)的详细信息。 Caddy 的几乎所有配置都包含在单个配置文档中,而不是像其他 Web 服务器那样分散在 CLI 标志、环境变量和配置文件中。这使得管理服务器配置更加直接,并减少了隐藏变量/因素。 ## 完整文档 我们的网站有完整的文档: **https://caddyserver.com/docs/** 文档也是开源的。您可以在此处为其做出贡献:https://github.com/caddyserver/website ## 获取帮助 - 我们建议使用 Caddy 的公司在需要帮助之前通过 [Ardan Labs](https://www.ardanlabs.com) 获得支持合同。 - [赞助](https://github.com/sponsors/mholt) 非常有帮助!我们可以为赞助商提供私人帮助。如果 Caddy 让您的公司受益,请考虑赞助。这不仅有助于资助全职工作以确保项目的寿命,还为您的公司提供了所需的资源、支持和折扣;同时也能向您的客户和潜在客户展示公司的良好形象! - 个人可以在我们的社区论坛 https://caddy.community 免费交流帮助。请记住,人们是利用业余时间和善意提供帮助的。获得帮助的最好方法是先给予帮助! 请仅将我们的[问题跟踪器](https://github.com/caddyserver/caddy/issues)用于错误报告和功能请求,即可操作的开发项目(支持问题通常会被转介到论坛)。 ## 关于 Matthew Holt 于 2014 年在杨百翰大学学习计算机科学期间开始开发 Caddy。(选择“Caddy”这个名字是因为该软件有助于完成服务 Web 的枯燥、平凡的任务,并且也是将多件事物组织在一起的地方。)它很快成为第一个自动且默认使用 HTTPS 的 Web 服务器,现在拥有数百名贡献者,并已服务了数万亿个 HTTPS 请求。 **名称“Caddy”是商标。** 该软件的名称是“Caddy”,而不是“Caddy Server”或“CaddyServer”。请称其为“Caddy”,或者如果您希望澄清,请称其为“Caddy web server”。Caddy 是 Stack Holdings GmbH 的注册商标。 - _X 上的项目:[@caddyserver](https://x.com/caddyserver)_ - _X 上的作者:[@mholt6](https://x.com/mholt6)_ Caddy 是 HID Global 旗下 [ZeroSSL](https://zerossl.com) 的一个项目。 Debian 软件包仓库托管由 [Cloudsmith](https://cloudsmith.com) 慷慨提供。Cloudsmith 是唯一完全托管、云原生、通用的包管理解决方案,使您的组织能够以任何格式创建、存储和共享包到任何地方,并充满信心。
标签:Caddy, DNS解析, EVTX分析, EVTX分析, Go语言, Homebrew安装, HTTP/2, HTTP/3, Let's Encrypt, QUIC, SSL, TLS, Web基础设施, Web服务器, ZeroSSL, 内存取证对抗, 反向代理, 底层编程, 开源项目, 日志审计, 程序破解, 网关, 网站托管, 网络安全, 自动HTTPS, 防御工具, 隐私保护, 静态文件服务