第一章:Caddy 简介¶
什么是 Caddy?¶
Caddy 是一个开源的 Web 服务器,由 Matt Holt 于 2015 年创建。它的设计理念是让 Web 服务器配置变得简单、安全、人性化。
核心特点¶
1. 自动 HTTPS¶
Caddy 最引人注目的特性是自动获取和续期 SSL/TLS 证书:
- 自动从 Let's Encrypt 获取证书
- 自动续期,无需手动干预
- 支持 DNS 挑战验证
- 零配置启用 HTTPS
2. 简洁的配置语法¶
Caddy 使用 Caddyfile 作为配置文件,语法非常直观:
# 反向代理示例
api.example.com {
reverse_proxy localhost:8000
}
# 静态文件服务
www.example.com {
root * /var/www/html
file_server
}
对比 Nginx 配置:
# Nginx 需要更多配置
server {
listen 80;
listen 443 ssl;
server_name api.example.com;
ssl_certificate /etc/letsencrypt/live/api.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api.example.com/privkey.pem;
location / {
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
3. 内置常用功能¶
Caddy 内置了许多需要 Nginx 额外配置或模块的功能:
| 功能 | Caddy | Nginx |
|---|---|---|
| Gzip 压缩 | 默认启用 | 需配置 |
| HTTP/2 | 默认启用 | 需配置 |
| HTTP/3 (QUIC) | 默认启用 | 需编译支持 |
| 自动 HTTPS | 默认启用 | 需配置 Certbot |
| 访问日志 | 简单配置 | 需配置 |
| 路由重写 | 简洁语法 | 复杂语法 |
Caddy vs Nginx¶
适用场景对比¶
| 场景 | 推荐 | 原因 |
|---|---|---|
| 个人项目/小团队 | Caddy | 配置简单,自动 HTTPS |
| 快速原型开发 | Caddy | 零配置启动 |
| 大规模生产环境 | Nginx | 性能优化更精细 |
| 需要复杂路由规则 | Nginx | 功能更丰富 |
| 容器化部署 | Caddy | 单二进制文件 |
| 传统运维体系 | Nginx | 文档和生态更成熟 |
性能对比¶
Caddy 使用 Go 语言编写,性能优秀:
- 单二进制文件,无依赖
- 内存占用适中
- 并发处理能力强
- 支持 HTTP/3
对于大多数应用场景,Caddy 的性能完全足够。
Caddy 架构¶
核心组件¶
┌─────────────────────────────────────┐
│ Caddy Server │
├─────────────────────────────────────┤
│ ┌─────────┐ ┌─────────┐ │
│ │ Caddyfile│ │ JSON │ │
│ │ (配置) │ │ (配置) │ │
│ └────┬────┘ └────┬────┘ │
│ │ │ │
│ └──────┬─────┘ │
│ ▼ │
│ ┌─────────────────────┐ │
│ │ Configuration Core │ │
│ └─────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────┐ │
│ │ HTTP Server │ │
│ │ ┌───────────────┐ │ │
│ │ │ TLS Manager │ │ │
│ │ └───────────────┘ │ │
│ └─────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────┐ │
│ │ Handlers (中间件) │ │
│ │ - reverse_proxy │ │
│ │ - file_server │ │
│ │ - encode (压缩) │ │
│ │ - log (日志) │ │
│ └─────────────────────┘ │
└─────────────────────────────────────┘
请求处理流程¶
客户端请求
│
▼
┌─────────────┐
│ TLS 握手 │ ← 自动证书管理
└─────────────┘
│
▼
┌─────────────┐
│ HTTP 解析 │ ← HTTP/1.1, HTTP/2, HTTP/3
└─────────────┘
│
▼
┌─────────────┐
│ 路由匹配 │ ← 根据 Host、Path 匹配
└─────────────┘
│
▼
┌─────────────┐
│ 中间件处理 │ ← 压缩、日志、认证等
└─────────────┘
│
▼
┌─────────────┐
│ 处理器执行 │ ← 反向代理/静态文件/等
└─────────────┘
│
▼
客户端响应
安装方式概览¶
Caddy 支持多种安装方式:
1. 官方脚本安装(推荐)¶
# Linux/macOS
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
2. Docker 安装¶
docker run -d \
--name caddy \
-p 80:80 \
-p 443:443 \
-v /path/to/Caddyfile:/etc/caddy/Caddyfile \
-v caddy_data:/data \
caddy:latest
3. 二进制下载¶
从 GitHub Releases 下载对应平台的二进制文件。
小结¶
Caddy 是一个现代化的 Web 服务器,特别适合:
- 需要快速部署 HTTPS 的项目
- 配置简单的反向代理需求
- 容器化部署场景
- 个人开发者和小团队
下一章我们将详细介绍 Caddy 的安装和基本配置。