跳转至

第一章:Caddy 简介

什么是 Caddy?

Caddy 是一个开源的 Web 服务器,由 Matt Holt 于 2015 年创建。它的设计理念是让 Web 服务器配置变得简单、安全、人性化。

核心特点

1. 自动 HTTPS

Caddy 最引人注目的特性是自动获取和续期 SSL/TLS 证书:

  • 自动从 Let's Encrypt 获取证书
  • 自动续期,无需手动干预
  • 支持 DNS 挑战验证
  • 零配置启用 HTTPS
# 只需要这样写,Caddy 自动处理 HTTPS
example.com {
    reverse_proxy localhost:3000
}

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 的安装和基本配置。