跳到正文
发现
Caddy:默认自动 HTTPS 的 Web 服务器
命令行工具开发者工具

Caddy:默认自动 HTTPS 的 Web 服务器

用 Go 编写的可扩展多平台 Web 服务器,默认启用 HTTPS,可作为 HTTPS 服务器与反向代理使用。

admin
发布于 2026-10-28
浏览
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 整理,以原仓库为准。

更新记录

  1. v2.11.7当前版本

    修复 2.11.6 引入的空闲超时回归:HTTP/2 反向代理崩溃、带请求体的 HTTP/1.1 流式响应 60 秒后被切断、HTTP/2 静默流被重置;并新增对 Incremental 头字段(RFC 10036)的支持。

评论