Nginx 用了这么多年,一直觉得它的配置语法反人类。直到遇到 Caddy —— 自动 HTTPS、简洁的 Caddyfile、原生 HTTP/3 支持,让我决定在新项目中全面切换。本文对比两者差异,分享生产环境配置经验。

Nginx vs Caddy — 配置对比
🔴 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

二、自动证书管理

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),这点差距远不如运维成本的降低来得重要。

Caddy 内置监控 — /metrics 端点
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 作为降级方案。
  1. 先用 Caddy 跑一个内部服务 2 周
  2. 对比监控指标(延迟、错误率、资源占用)
  3. 确认证书自动续签正常工作
  4. 逐步迁移生产服务

六、结论

Caddy 不是要完全取代 Nginx,而是在大多数场景下提供了更好的开发体验。对于追求极致性能的超高并发场景,Nginx 依然是首选。但对于中小团队来说,Caddy 降低的运维成本远超那点性能差距。