概述
Caddy 本质上是一个配置管理系统,可以运行各种应用程序,例如 HTTP 服务器、TLS 证书管理器、PKI 设施等等。它可以通过称为配置模块的插件进行扩展。
Caddy 拥有灵活强大的 HTTP 反向代理、在线配置 API 和健壮、可用于生产环境的静态文件服务器,并且默认情况下通过自动 TLS 证书为所有站点提供 HTTPS 服务。
总体程序技术规格
语言
内存安全保证
运行时依赖项
编译时间
热构建约 2 秒
部署环境
- 命令行界面
- 系统服务
- 容器
- Kubernetes
- 嵌入式
供应链和发布
操作系统
- Linux
- Windows
- macOS
- FreeBSD
- OpenBSD
- NetBSD
- Android
微体系结构
- x86 (i386, i686)
- x86-64 (AMD64)
- ARM
- ARM 64 (AArch64)
- MIPS
- MIPS64[LE]
- PPC64[LE]
- RISCV64
- S390X
- Apple Silicon (Apple ARM; M1, M2 等)
正则表达式引擎
并发模型
插件模型
高级功能
配置更改
- RESTful HTTP API
- 配置文件
- 安全远程访问
应用程序模块
- HTTP
- TLS
- PKI
- 事件
- 原始 TCP & UDP
- SSH
- PHP
- 动态 DNS
- 安全
- 进程监控
- 分析
日志
- 分级
- 结构化
- 高效率,零分配
- 可扩展
- 删除、过滤、屏蔽和审查字段
- IP 掩码
- 哈希值
- 正则表达式替换
存储
- 文件系统
- 嵌入式(内存中)
- Postgres
- Redis
- Vault
- Consul
命令行界面
Caddy 的 CLI 不仅有用——它还很方便。虽然大多数服务器 CLI 只是运行进程并重新加载配置,但 Caddy 的 CLI 更加努力,可以帮助您轻松管理现代 Web 服务器。
插件可以注册自己的子命令来扩展 Caddy 的 CLI。
命令帮助
caddy help
或 -h
访问总体命令帮助或子命令帮助。man
页面)管理 API 包装器
- 将配置调整为 JSON
- 启动服务器,可选地使用配置
- 优雅地重新加载配置
- 停止服务器
二进制实用程序
- 详细的构建元数据
- 列出已安装的配置模块
- 列出依赖项
- 添加和删除插件包
- 打印版本
- 升级 Caddy 二进制文件
配置实用程序
- 格式化 Caddyfile
- 验证配置
- 列出依赖项
- 添加和删除插件包
- 打印版本
模块实用程序
- 静态文件服务器
- HTTP 反向代理
- 静态 HTTP 响应(可模板化)
- 存储导入/导出(备份/还原)
- 为 HTTP 基本身份验证哈希密码
- 导出文件浏览模板
集成实用程序
- 生成 shell 完成脚本
- 打印环境
- 生成
man
页面 - 将 Caddy 管理的根 CA 安装到信任存储中
- 从信任存储中删除 Caddy 管理的根 CA
退出代码
配置
我们设计 Caddy 的目的是让它的配置不仅提供对功能的访问,而且本身就是一项功能。
不再需要争论哪种配置文件格式最好:使用您想要的任何格式!Caddy 的 配置适配器 允许您使用您喜欢的任何配置格式。
原生配置格式
配置适配器
- Caddyfile
- JSON 5
- JSON-C
- NGINX Conf
- YAML
- CUE
- TOML
- HCL
- Dhall
- MySQL
人性化的配置
导出
配置 API
配置文件
自动 HTTPS
我们的旗舰功能,由 CertMagic 提供支持。Caddy 是第一个也是唯一一个默认情况下启用 HTTPS 的主要服务器,并且会自动获取和续订所有站点的证书。
完全原生的集成自动 HTTPS 远远优于任何需要外部工具或 cron 作业的解决方案。Caddy 的证书维护是业界最好的,因为它比任何其他解决方案都更加健壮、可靠和可扩展。Caddy 简化了您的基础设施,而不是使其复杂化。
当然,您可以尝试使用 Certbot 和 cron 作业部署 10 万个网站,但如果它本身没有崩溃,那么 Web 服务器就会崩溃。只有 Caddy 旨在水平和垂直扩展 TLS 证书。
永远不要手动生成 CSR。永远不要点击电子邮件中的链接下载证书。永远不要(错误地)配置您的 Web 服务器以使用它们。永远不要错过每隔几个月证书到期前逐个提醒您续订证书。您甚至不必考虑证书或 TLS。
它确实是自动的。
合规性
- 符合 PCI DSS
- 符合 NIST
- 符合 HIPAA
- 行业最佳实践
按需 TLS
证书颁发机构
- ACME
- 内部(自签名)
- Microsoft Active Directory 证书服务
证书管理器
- HTTP
- Tailscale
集群协调
- 获取和续订证书
- 加载现有证书
- OCSP 钉书钉
- 会话票证密钥 (STEK)
将 HTTP 重定向到 HTTPS
OCSP
必须钉书钉
吊销处理
密钥类型
- Ed25519
- ECDSA P256
- ECDSA P384
- RSA 2048
- RSA 4096
证书有效期
大多数 ACME 客户端假设 90 天的证书,或者不希望证书短于 7 天。Caddy 可以成功管理有效期为小时和分钟的证书。
Caddy 不会在续订前硬编码某个年龄,而是根据每个证书的寿命计算年龄,称为续订窗口比率。默认情况下,Caddy 在证书可用寿命的 2/3 之后续订证书。此比率适用于大多数有效期,但可以调整。
智能错误处理
内置节流
ACME
Caddy 的 ACME 客户端是同类最佳,其可靠性和生产经验高于当今任何其他集成 ACME 客户端。Caddy 自 Let's Encrypt 公开发布之前就开始使用 ACME,并且 Caddy 与任何兼容 ACME 的 CA 合作。
兼容性
- Let's Encrypt
- ZeroSSL
- Google 信任服务
- BuyPass
- DigiCert
- GlobalSign
- SSL.com
- Smallstep
测试端点
外部帐户绑定
挑战类型
- HTTP-01
- TLS-ALPN-01
- DNS-01
备用挑战端口
- HTTP(默认 80)
- TLS-ALPN(默认 443)
智能挑战选择
DNS 挑战集成
- ACME-DNS
- AliDNS
- Cloudflare
- DigitalOcean
- DNSPod
- DuckDNS
- DynDNS
- EasyDNS
- Gandi
- GoDaddy
- Google Cloud DNS
- Hetzner
- Linode
- Name.com
- Namecheap
- Namesilo
- Netlify
- OVH
- Porkbun
- PowerDNS
- RFC 2136
- Route 53
- Scaleway
- Vercel
- Vultr
- 查看全部...
受信任的 CA 证书
首选链
- 最小
- 根的 CommonName
- 任何的 CommonName
HTTP 服务器
Caddy 的 HTTP 服务器是独一无二的:强大、可扩展、高效且现代。
HTTP 版本
- HTTP/1.1
- HTTP/2
- 明文上的 HTTP/2 (H2C)
- HTTP/3
HTTPS
监听接口
- TCP
- UDP
- Unix 套接字
监听器包装器
- 在 HTTPS 端口上重定向 HTTP
- PROXY 协议
- Tailscale
超时
- 读取超时
- 读取 HTTP 标头超时
- 写入超时
- 空闲超时
- TCP 保持活动间隔
全双工通信
- 可配置为 HTTP/1
- HTTP/2 的默认值
错误处理
TLS 终止
- TLS 1.2
- TLS 1.3
- 客户端身份验证(TLS 互信认证;mTLS)
- 客户端身份验证模式:请求、要求、如果给出则验证、要求和验证
- 密码套件
- 曲线
- ALPN
- 限制协议版本
- 默认 SNI
- 回退 SNI
跨站点安全
访问日志
- 比通用日志格式 (CLF) 更实用
- 请求标头(除了敏感字段)
- 响应标头
- 远程 IP
- 延迟
可观察性
请求处理
请求过滤器
- 主机
- 路径
- 方法
- 标头
- 协议
- 远程 IP
- 任意 CEL 表达式
- 文件(存在、大小、修改日期)
- HTTP 路由变量
- 逻辑 NOT
- 地理位置
- 远程主机
HTTP 处理程序
处理程序是模块,可以将它们组合在一起以精确地按照您想要的方式处理传入的请求。处理程序模块与 Caddy 的其他部分一样,是可扩展的和可插拔的。我们不可能在这里列出所有处理程序。
实际上,处理程序与匹配器配对,匹配器根据各种属性(例如它们的路径、标头、查询字符串、方法等)过滤或分类请求。这使您可以选择性地将所有这些处理程序应用于某些请求。
ACME 服务器
Authelia
身份验证
- HTTP 基本身份验证
- JWT
- Discord
- 表单
- SAML
高级身份验证
- 基于表单
- 本地
- 基本
- LDAP
- OpenID Connect
- OAuth 2
- SAML
缓存
- Badger
- Etcd
- NutsDB
- Olric
- Redis
编码
- Gzip
- Zstandard (zstd)
- Brotli
文件服务器
Go 包虚荣路径
gRPC-Web 桥接
标头操作
- 添加
- 设置(覆盖)
- 删除
- 子字符串替换
图像过滤
- 裁剪
- 拟合
- 翻转
- 调整大小
- 旋转
- 锐化
映射
Mercure
指标
HTTP/2 服务器推送
速率限制
- 本地或分布式
- 多个区域
- 缓冲池
- 仅 1 个 goroutine
- 可配置的 O(Kn) 内存管理
- 通过重新加载持久化状态
- 设置 Retry-After 标头
- 可选抖动
- 高度可编程
请求主体控制
反向代理
重写请求
- 方法
- URI(路径、查询字符串)
- 剥离路径前缀或后缀
- 支持正则表达式
- 智能 URL 编码和正斜杠处理
静态响应
子路由
模板
跟踪
变量
WebDAV
反向代理
Caddy 拥有世界上最灵活的通用反向代理,具有先进的请求和响应处理、动态路由、健康检查、负载均衡、断路器等功能。
Caddy 代理的独特之处在于其设计。只有代理的客户端部分需要是 HTTP;与后端往返的底层传输可以使用任何协议来实现!
此外,我们的代理可以使用高度动态的上游进行编程。也就是说,可用的上游可以在飞行中的请求期间发生变化!如果没有任何后端可用,Caddy 可以保留请求,直到有后端可用为止。
高级代理功能
传输
- HTTP
- FastCGI
- NTLM
负载均衡
- 随机
- 随机选择 N
- 最少连接
- 循环
- 加权循环
- 第一个可用
- 远程 IP 哈希
- 客户端 IP 哈希
- URI 哈希
- 查询哈希
- 标头哈希
- Cookie 哈希
断路器
健康检查
- 主动
- 被动
可观察性
上游来源
- 静态
- 动态:A 记录
- 动态:SRV 记录
- 动态:多个来源组合
重试
流式传输
受信任的代理
标头操作
- 添加
- 设置(覆盖)
- 删除
- 子字符串替换
缓冲
- 请求
- 响应
请求重写
响应拦截
主动健康检查
主动健康检查默认情况下假设后端已宕机,直到健康检查确认情况并非如此。
HTTP 请求参数
- 路径和查询字符串
- 端口
- 标头
计时
成功条件
- 响应超时
- HTTP 状态代码
- 主体上的正则表达式匹配
故障安全
被动健康检查
被动健康检查默认情况下假设后端已启动,直到在代理请求过程中满足故障条件。
故障条件
- 并发请求限制已超过
- HTTP 状态
- 延迟
故障内存
HTTP 传输
这是默认的传输模块。它会创建一个代理的 HTTP 请求,以从后端获取 HTTP 响应。
DNS 解析器
TLS
- 自定义根 CA 池
- 对后端的客户端身份验证
- 自定义握手超时
- 服务器名称指示 (SNI)
- 重新协商级别
- 将某些端口从 TLS 中排除
连接池
- HTTP Keep-Alive
- 自定义探测间隔
- 最大空闲连接数(总计和每个主机)
- 空闲连接超时
压缩
连接限制
PROXY 协议
超时
- 连接(拨号)
- RFC 6555 回退
- 读取响应标头
- 期望继续
- 读取
- 写入
自定义缓冲区大小
- 读取缓冲区
- 写入缓冲区
HTTP 版本
- HTTP/1.1
- HTTP/2
- H2C(HTTP/2 over cleartext)
FastCGI 传输
FastCGI 通常用于通过 php-fpm 提供 PHP 应用程序。FastCGI 响应器可能需要有关正在运行的脚本的附加信息,例如脚本名称、相对于根目录的路径等,而 Caddy 的 FastCGI 传输负责处理所有这些信息并使其可配置。
高效
路径拆分
解析根符号链接
环境变量
超时
- 拨号(连接)
- 读取
- 写入
捕获 stderr
静态文件服务器
Caddy 的文件服务器是为您的网站提供静态文件的最佳方式。
很简单:指定一个根目录来提供文件,然后每个请求路径都会自动附加到根目录以获取要提供的文件的完整路径。
内核加速
虚拟文件系统
- 本地磁盘
- 嵌入式资产
- Amazon AWS S3
预压缩文件
- Gzip
- Brotli
- Zstandard
隐藏文件和文件夹
索引文件名
条件请求
- Etag
- Last-Modified
- If-Match
- If-None-Match
- If-Modified-Since
- If-Unmodified-Since
- If-Range
范围请求
规范路径
直通模式
文件浏览器
Caddy 的文件服务器通过其现代文件浏览器变得活跃起来,该浏览器在移动设备和台式机上看起来都很吸引人。它比任何其他标准 HTTP 文件服务器都具有更多功能和实用性!
文件夹列表
昼夜主题
- 浅色模式
- 深色模式
按列排序
- 文件/目录
- 名称
- 大小
- 修改日期
过滤器
布局
- 列表
- 网格
响应式设计
JSON API
Accept-Encoding: application/json
标头的请求将以 JSON 负载进行回复,以供以编程方式或通过脚本访问您的文件列表。可自定义的列表模板
文件大小可视化
文件类型图标
Caddy 是一个充满活力的项目,拥有大量功能。此页面尚未全面列出 Caddy 提供的所有功能和优势,因为要提到的内容太多了。我们欢迎您在 GitHub 上 贡献!