爱库录 目录即站点,文件即文章

Caddy vs Nginx:我为什么换到了Caddy

2026-09-17 · 技术 · 返回列表

title: "Caddy vs Nginx:我为什么换到了 Caddy" date: 2026-09-11 tags: [Caddy, Nginx, 反向代理, HTTPS, 运维] category: 技术 description: "用了 5 年 Nginx,去年全换成了 Caddy。不是 Nginx 不好,是 Caddy 在我的场景下更省心。"

Caddy vs Nginx:我为什么换到了 Caddy

Nginx 是个好东西。稳定、高性能、生态成熟。我用了 5 年,没出过大问题。

但去年我把所有服务的反代都换成了 Caddy。原因只有一个:省心。

HTTPS 的痛

用 Nginx 配 HTTPS,流程大概是这样的:

  1. 安装 certbot
  2. certbot certonly --webroot ... 申请证书
  3. 配置 SSL 相关参数(协议版本、密码套件、HSTS……)
  4. 写个 cron job 每 60 天自动续期
  5. 续期后 reload Nginx
  6. 偶尔续期失败,手动排查

每加一个新域名,重复一遍。忘了 cron?证书过期,网站打不开。

用 Caddy:

aiklog.cn {
    reverse_proxy localhost:8780
}

没了。Caddy 自动申请 Let's Encrypt 证书,自动续期,自动配置 HTTPS。你甚至不需要知道 HTTPS 这件事的存在。

配置对比

同一个需求:反代到本地 8080 端口,强制 HTTPS,加 gzip。

Nginx

server {
    listen 80;
    server_name aiklog.cn;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name aiklog.cn;

    ssl_certificate /etc/letsencrypt/live/aiklog.cn/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/aiklog.cn/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    add_header Strict-Transport-Security "max-age=63072000" always;

    gzip on;
    gzip_types text/plain application/json text/css application/javascript;
    gzip_min_length 1000;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Caddy

aiklog.cn {
    encode gzip
    reverse_proxy localhost:8080
}

4 行 vs 30 行。

性能差距

实测(2C4G 服务器,QPS 压测):

| 指标 | Nginx | Caddy | |------|-------|-------| | QPS(静态文件) | 45,000 | 38,000 | | QPS(反代) | 22,000 | 19,000 | | 内存占用 | ~5MB | ~15MB | | 冷启动 | 即时 | ~200ms |

Nginx 在 raw performance 上确实更快。但说实话,对于个人博客和中小型项目,这个差距完全没有意义。 你的瓶颈在数据库和业务逻辑,不在反代层。

Caddy 的其他好东西

自动 HTTPS 是默认行为

不是「支持 HTTPS」,是「默认就是 HTTPS」。HTTP 自动 301 到 HTTPS,证书自动管理,你什么都不用配。

配置热更新

改了 Caddyfile,caddy reload 就行,不用重启,不断连接。Nginx 也能 nginx -s reload,但 Caddy 还支持 API 动态修改配置。

内置文件服务器

file_server {
    root /var/www/blog
}

不需要额外装什么,直接当静态文件服务器用。

reverse_proxy 健康检查

reverse_proxy localhost:8080 {
    health_uri /health
    health_interval 10s
}

Nginx 的开源版不支持主动健康检查(商业版才有),需要额外模块。

什么时候还用 Nginx

  • 极高并发场景 — 百万级 QPS,Nginx 的性能优势才真正体现
  • 复杂的 URL 重写规则 — Nginx 的 rewrite 生态更成熟
  • 公司已经有 Nginx 运维体系 — 没必要为了个人偏好换掉
  • 需要特定模块 — Nginx 的第三方模块生态比 Caddy 丰富

我的选择

个人项目和小团队:Caddy。 省下的时间比省下的那点性能值钱。

大型生产环境:Nginx。 生态和性能经过了更大规模的验证。

两个都是好工具。选哪个取决于你的场景,不是哪个「更好」。


相关:[[这个博客是怎么搭的]] 里有完整的部署架构。