1. Caddy 简介
Caddy 是一个用 Go 语言编写的现代化、功能强大且易于扩展的 Web 服务器平台。与传统的 Web 服务器相比,Caddy 的一个显著特点是自动 HTTPS,它可以为您的站点自动获取和续订 TLS 证书。
本入门指南参考了 Caddy 官方的 Getting Started 文档,旨在帮助您快速了解 Caddy 的基本使用和核心概念。
2. 快速入门 (基于官方 Getting Started)
前提条件:
具备基本的终端/命令行操作能力。 系统中已安装 caddy
和curl
。
2.1 运行 Caddy 守护进程
直接运行 caddy
命令会显示帮助信息。要启动 Caddy 作为后台服务(守护进程),请使用 run
子命令:
caddy run
默认情况下,Caddy 启动时没有配置,所以它暂时什么也不做。这个命令会一直阻塞当前终端。
2.2 Caddy 的管理 API
Caddy 提供了一个管理 API(默认监听在 localhost:2019
),用于动态配置和管理服务器。您可以在另一个终端中使用 curl
来检查当前配置(默认为空):
curl localhost:2019/config/
注意: 这个管理端口默认只允许本地访问,不是您对外提供服务的端口。
2.3 第一个配置 (使用 API)
Caddy 的原生配置格式是 JSON。您可以创建一个 JSON 文件(例如 caddy.json
)来定义服务:
{
"apps": {
"http": {
"servers": {
"example": {
"listen": [":2015"], # 监听 2015 端口
"routes": [
{
"handle": [{
"handler": "static_response",
"body": "Hello, world!"
}]
}
]
}
}
}
}
}
然后,通过 API 的 /load
端点将此配置加载到正在运行的 Caddy 实例:
curl localhost:2019/load \\
-H "Content-Type: application/json" \\
-d @caddy.json
现在访问 http://localhost:2015
,您应该能看到 "Hello, world!"。
2.4 第一个 Caddyfile
手动编写 JSON 配置可能比较繁琐。Caddy 提供了更简洁、人类友好的 Caddyfile 格式。上述 JSON 配置等效的 Caddyfile 如下:
:2015 respond "Hello, world!"
将这个内容保存为名为 Caddyfile
(无扩展名)的文件。
2.5 使用 Caddyfile 运行
您可以先停止之前运行的 caddy run
(Ctrl+C)。然后,如果您在包含 Caddyfile
的目录下,可以直接运行:
caddy run
Caddy 会自动检测到 Caddyfile
,使用内置的 配置适配器 (config adapter) 将其转换为 JSON,然后加载运行。
如果 Caddyfile 在其他路径或有不同名称,可以使用 --config
参数指定:
caddy run --config /path/to/your/Caddyfile
(如果文件名不是以 Caddyfile
开头,可能还需要 --adapter caddyfile
。)
2.6 自动 HTTPS
Caddy 的核心优势之一。如果您在 Caddyfile 中使用域名替换监听端口(例如 yourdomain.com
替换 :2015
),Caddy 会自动为该域名申请并配置 HTTPS。
yourdomain.com respond "Secure Hello!" # Caddy 会自动处理 HTTPS
3. Caddy 与 Nginx 对比
特性 | Caddy | Nginx |
---|---|---|
核心语言 | Go | C |
配置格式 | Caddyfile (简洁,推荐), JSON (原生, API驱动) | Nginx 特有的指令块语法 (强大但相对复杂) |
HTTPS | 自动 HTTPS (默认),通过 Let's Encrypt/ZeroSSL 自动管理 | 需要手动配置证书,通常配合 Certbot 等工具 |
易用性 | Caddyfile 非常易于上手,API 提供动态配置能力 | 配置语法学习曲线较陡峭,尤其对于复杂场景 |
性能 | 高性能,Go 语言并发模型有优势 | 极高性能,久经考验,尤其擅长静态文件处理和高并发 |
动态配置 | 通过 API 可实现完全动态配置,无需重载或重启 | 通常需要修改配置文件并 reload 或 restart 服务 |
模块化 | Go 模块化系统,易于扩展 | 成熟的模块系统,社区模块丰富,但编译安装可能较复杂 |
核心功能 | 现代 Web 功能(HTTP/2, HTTP/3 默认支持),自动 HTTPS | 功能全面,反向代理、负载均衡、缓存等非常成熟 |
内存占用 | 通常比 Nginx 稍高 | 内存占用非常低 |
社区与生态 | 快速发展中,社区活跃 | 非常庞大成熟的社区和生态系统,文档和资源极其丰富 |
主要优势 | 简单易用,自动 HTTPS,现代特性,API 驱动 | 极致性能,稳定性,成熟生态,广泛应用,低资源消耗 |
适合场景 | 快速部署、需要自动 HTTPS、微服务网关、API 驱动配置、开发者 | 高流量网站、复杂反向代理/负载均衡、需要极致优化、企业级稳定 |
4. 总结
Caddy 是一个现代化的 Web 服务器,以其易用性和自动 HTTPS功能脱颖而出。对于需要快速搭建网站、简化 SSL 证书管理、或者需要通过 API 进行动态配置的场景,Caddy 是一个极佳的选择。
Nginx 则是一个久经考验的、性能卓越的服务器,在处理超高并发、复杂的反向代理和负载均衡场景下依然是行业标杆。它的配置虽然相对复杂,但提供了极高的灵活性和优化空间。
选择哪个服务器取决于您的具体需求、技术背景和项目目标。对于许多现代应用和开发者来说,Caddy 提供了更平滑、更便捷的体验。
参考链接: Caddy Getting Started