Nginx 用了这么多年,一直觉得它的配置语法反人类。直到遇到 Caddy —— 自动 HTTPS、简洁的 Caddyfile、原生 HTTP/3 支持,让我决定在新项目中全面切换。本文对比两者差异,分享生产环境配置经验。
🔴 Nginx — 45 行
server {
listen 443 ssl;
server_name api.example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-...;
location / {
proxy_pass http://localhost:3000;
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 — 3 行
api.example.com {
reverse_proxy localhost:3000
}
一、为什么考虑 Caddy
- 自动 HTTPS:内置 Let's Encrypt,零配置获取和续签证书
- 配置简洁:Caddyfile 语法直观,上手即用
- HTTP/3 原生支持:基于 QUIC 协议,无需额外编译模块
- Go 编写:单二进制文件,无依赖,部署简单
- API 驱动:支持通过 REST API 动态修改配置
二、自动证书管理
Caddy 的杀手级功能。只需在 Caddyfile 中写明域名,证书的申请、续签、OCSP Stapling 全部自动完成。
# 多域名自动 HTTPS
app1.example.com {
reverse_proxy localhost:3001
}
app2.example.com {
reverse_proxy localhost:3002
}
# 带路径匹配
example.com {
handle_path /api/* {
reverse_proxy localhost:8080
}
handle {
root * /var/www/html
file_server
}
}
三、生产环境性能对比
~2ms
Caddy 反向代理延迟
~1.5ms
Nginx 反向代理延迟
0
Caddy 证书维护成本
纯性能方面,Nginx 在高并发场景下依然有约 10-15% 的吞吐量优势。但对于大多数中小型项目(QPS < 5000),这点差距远不如运维成本的降低来得重要。
12,847
今日请求总数
99.97%
成功率
23ms
P95 响应时间
✅
SSL 证书状态 (自动)
HTTP/3
协议支持
2026.06.15
下次续签时间
四、常用模块配置
4.1 限流与安全
api.example.com {
# 速率限制
rate_limit {
zone api_limit {
key {remote_host}
events 100
window 1m
}
}
# 安全头
header {
X-Content-Type-Options "nosniff"
X-Frame-Options "DENY"
Strict-Transport-Security "max-age=31536000"
}
reverse_proxy localhost:3000
}
五、迁移建议
💡 实操建议:不要一次性迁移所有服务。建议先在非核心业务上试用 Caddy,验证稳定性后再逐步替换。保留 Nginx 作为降级方案。
- 先用 Caddy 跑一个内部服务 2 周
- 对比监控指标(延迟、错误率、资源占用)
- 确认证书自动续签正常工作
- 逐步迁移生产服务
六、结论
Caddy 不是要完全取代 Nginx,而是在大多数场景下提供了更好的开发体验。对于追求极致性能的超高并发场景,Nginx 依然是首选。但对于中小团队来说,Caddy 降低的运维成本远超那点性能差距。