Caddy vs Nginx:我为什么换到了Caddy
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,流程大概是这样的:
- 安装 certbot
certbot certonly --webroot ...申请证书- 配置 SSL 相关参数(协议版本、密码套件、HSTS……)
- 写个 cron job 每 60 天自动续期
- 续期后 reload Nginx
- 偶尔续期失败,手动排查
每加一个新域名,重复一遍。忘了 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。 生态和性能经过了更大规模的验证。
两个都是好工具。选哪个取决于你的场景,不是哪个「更好」。
相关:
[[这个博客是怎么搭的]]里有完整的部署架构。