强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

Caddy 从入门到精通 / 01 - 初识 Caddy / Introduction to Caddy

初识 Caddy / Introduction to Caddy

Caddy 是什么? / What is Caddy?

Caddy 是一个用 Go 语言编写的现代 Web 服务器,以 自动 HTTPS零配置启动人类友好的配置语法 著称。

Caddy is a modern web server written in Go, known for its automatic HTTPS, zero-config startup, and human-friendly configuration syntax.

它同时是:

  • Web 服务器 / Web Server
  • 反向代理 / Reverse Proxy
  • 负载均衡器 / Load Balancer
  • API 网关 / API Gateway

与 Nginx、Apache 并列为三大主流 Web 服务器,但设计理念完全不同。


🟢 基础 / Basics — 为什么选 Caddy? / Why Caddy?

1. 自动 HTTPS(开箱即用)

example.com {
    respond "Hello, World!"
}

仅仅 3 行配置,Caddy 就会:

  • 自动申请 Let’s Encrypt 证书
  • 自动配置 TLS
  • 自动续期证书
  • HTTP 自动跳转 HTTPS

Nginx 要做到同样效果,需要 30+ 行配置 + certbot + cron job。

2. 配置语法极其简洁

Nginx:

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    root /var/www/html;
    index index.html;
}

Caddy:

example.com {
    root * /var/www/html
    file_server
}

3. 无需 reload 即可热更新

caddy reload

Caddy 支持 graceful reload,不会断开任何连接。


🟡 进阶 / Intermediate — Caddy 的设计哲学 / Design Philosophy

与 Nginx 的核心差异

维度NginxCaddy
配置语言自定义 DSLCaddyfile / JSON API
HTTPS手动配置全自动
模块扩展编译时静态加载运行时动态插件
配置格式nginx.confCaddyfile → JSON API
零停机更新nginx -s reloadcaddy reload
首次发布20042015

Caddy 的两种配置模式

模式一:Caddyfile(推荐新手)

localhost {
    respond "Hello"
}

模式二:JSON API(生产推荐)

{
  "apps": {
    "http": {
      "servers": {
        "myserver": {
          "listen": [":443"],
          "routes": [{
            "match": [{"host": ["example.com"]}],
            "handle": [{"handler": "static_response", "body": "Hello"}]
          }]
        }
      }
    }
  }
}

两者关系:Caddyfile 最终会被 caddy adapt 转换为 JSON。JSON 是 Caddy 的"原生语言"。


🔴 高级 / Advanced — Caddy 内部架构 / Internal Architecture

请求处理管线(Request Handling Pipeline)

Client Request
     │
     ▼
┌─────────────┐
│   Listener   │  ← TLS 终止 / TLS Termination
└─────┬───────┘
      ▼
┌─────────────┐
│   Router     │  ← 路由匹配 / Route Matching
└─────┬───────┘
      ▼
┌─────────────┐
│  Middleware  │  ← 洋葱模型 / Onion Model
│  Chain ↓     │
│  Handler     │
│  Chain ↑     │
└─────┬───────┘
      ▼
┌─────────────┐
│  Response    │  ← 返回客户端 / Write Response
└─────────────┘

核心概念:Module 系统

Caddy 的一切功能都是 Module:

// 每个 handler 都是一个 module
type Handler interface {
    ServeHTTP(http.ResponseWriter, *http.Request) error
}
  • file_server → module
  • reverse_proxy → module
  • basicauth → module
  • encode → module

这就是为什么 Caddy 可以通过 xcaddy 编译自定义插件:你只是注册了一个新的 module。

Caddyfile → JSON 的转换过程

Caddyfile
    │
    ▼ caddy adapt
JSON Config
    │
    ▼ caddy run
Runtime

理解这个流程很重要:当你调试配置问题时,caddy adapt --pretty 是你最好的朋友。


小结 / Summary

层级你需要知道的 / What You Need to Know
🟢 基础Caddy 自动 HTTPS、配置简洁、Go 编写
🟡 进阶Caddyfile vs JSON API、与 Nginx 差异
🔴 高级请求处理管线、Module 系统、配置转换流程

下一章:安装与部署 / Installation & Deployment