Caddy Server:自动 HTTPS 的反向代理新选择

zheng头像
zheng 2026-07-27 09:00
楼主

## 为什么考虑 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。

Tmux 终端复用器:SSH 断线任务不中断 酷我音乐特别版 v6.8.9.0:回归纯粹,无广告无弹窗的听歌体验

最新回复

暂无回复,来说两句吧

发表评论

站点总访问量:6218