## 为什么考虑 Caddy
Nginx 是反向代理的王者,但配置 SSL 证书需要 Certbot 配合,还要写 cron 定时续期。Caddy 的出现改变了这一切——它是用 Go 写的现代 Web 服务器,**自动申请和续期 Let's Encrypt 证书,零配置 HTTPS**。
## Caddy vs Nginx
| 特性 | Caddy | Nginx |
|------|-------|-------|
| HTTPS 自动配置 | 内置,零配置 | 需 Certbot + cron |
| 配置文件 | Caddyfile(简洁) | nginx.conf(功能全但冗长) |
| 性能 | 接近 Nginx | 业界标杆 |
| 插件生态 | 内置常用功能 | 需编译模块 |
| 资源占用 | 稍高于 Nginx | 更轻 |
| 学习曲线 | 低 | 中 |
## Docker 部署
```yaml
services:
caddy:
image: caddy:alpine
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./data:/data
- ./config:/config
```
## Caddyfile 配置示例
```caddyfile
# 最简单的反代
yourdomain.com {
reverse_proxy localhost:8080
}
# 多个子域名
blog.yourdomain.com {
reverse_proxy localhost:3000
}
api.yourdomain.com {
reverse_proxy localhost:8081
}
# 带路径重写的反代
files.yourdomain.com {
reverse_proxy /api/* localhost:5000
reverse_proxy /* localhost:3000
}
# 静态文件服务
static.yourdomain.com {
root * /var/www/static
file_server
}
```
## 进阶配置
**请求头透传:**
```caddyfile
yourdomain.com {
reverse_proxy localhost:8080 {
header_up Host {host}
header_up X-Real-IP {remote_host}
header_up X-Forwarded-For {remote_host}
header_up X-Forwarded-Proto {scheme}
}
}
```
**WebSocket 支持:**
Caddy 自动支持 WebSocket,不需要像 Nginx 那样额外配置。
**限流:**
```caddyfile
yourdomain.com {
rate_limit {
zone dynamic {
key {remote_host}
events 10
window 10s
}
}
reverse_proxy localhost:8080
}
```
**自定义证书:**
```caddyfile
yourdomain.com {
tls /path/to/cert.pem /path/to/key.pem
reverse_proxy localhost:8080
}
```
## 多站点 + 全局配置
```caddyfile
# 全局选项
{
email [email protected]
admin off
}
# 导入片段
(common) {
encode gzip
header {
X-Frame-Options "DENY"
X-Content-Type-Options "nosniff"
}
}
blog.yourdomain.com {
import common
reverse_proxy localhost:8080
}
wiki.yourdomain.com {
import common
reverse_proxy localhost:3000
}
```
## 从 Nginx 迁移到 Caddy
如果你现有的 Nginx 配置只是做反代,迁移到 Caddy 只需要:
1. 把 `proxy_pass http://localhost:8080;` 改成 `reverse_proxy localhost:8080`
2. 删掉所有 SSL 相关配置(Caddy 自动处理)
3. 删掉 Certbot 的 cron 任务
就这么简单。对于个人项目和中小型站点,Caddy 的"零配置 HTTPS"体验非常棒。如果你已经厌倦了手动管理证书,不妨试试 Caddy。