Определение простыми словами
Caddy — это HTTP/HTTPS-сервер, который из коробки получает и продлевает TLS-сертификаты по протоколу ACME. Не нужно отдельно ставить certbot, писать cron-задачи и руками править конфиг — достаточно указать домен. Внутри: Go-биндинги, HTTP/2 и HTTP/3 (QUIC) включены по умолчанию, reverse-proxy на каждый upstream, сжатие, кэш, базовая авторизация. Работает похоже на nginx, но с упором на простоту, а не на максимальную производительность под высокой нагрузкой.
Конфигурация описывается в Caddyfile — текстовом формате с минимумом синтаксиса, либо в JSON через Admin API. Поддержка TLS 1.3, OCSP-stapling, On-Demand TLS для мультидоменных проектов, а также интеграция с DNS-провайдерами для wildcard-сертификатов.
Сравнение
| Сервер | Авто-TLS | HTTP/3 | Конфиг |
|---|---|---|---|
| Caddy | Из коробки | Да, по умолчанию | Caddyfile / JSON |
| Nginx | Через certbot | С 1.25, нужна сборка | nginx.conf |
| Traefik | Из коробки | Да | YAML / labels Docker |
| Apache | Через mod_md | Нет | httpd.conf |
Кейсы использования
- Reverse-proxy для нескольких контейнеров с автоматическими сертификатами на каждый домен.
- Локальный HTTPS для разработки — Caddy сам выпускает локальный CA через mkcert.
- Раздача статики и SPA с поддержкой fallback на index.html.
- Площадка для пользовательских доменов (whitelabel) — On-Demand TLS выпустит сертификат при первом запросе.
- Негативный сценарий: на десятках тысяч запросов в секунду Caddy уступает nginx по чистой производительности и потреблению CPU. На крупных продакшен-инсталляциях с большим RPS лучше связка nginx + HAProxy.
Технические детали
Установка и минимальный Caddyfile с reverse-proxy и автоматическим TLS:
apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' > /etc/apt/sources.list.d/caddy-stable.list
apt update && apt install caddy
cat > /etc/caddy/Caddyfile <<EOF
example.com {
encode zstd gzip
reverse_proxy localhost:3000
log {
output file /var/log/caddy/access.log
}
}
EOF
systemctl reload caddy
После reload Caddy сам выпустит сертификат через Let’s Encrypt и будет продлевать его за 30 дней до истечения. Логи DNS-валидации и ACME-челленджей пишутся в journalctl -u caddy.
🔥 Где это применяется
Частые вопросы
Чем Caddy лучше nginx?
Главное преимущество — автоматический выпуск и продление TLS-сертификатов без сторонних утилит. Конфиг короче, HTTP/3 включён по умолчанию. Проигрывает nginx на сверхвысоких RPS.
Можно ли использовать Caddy с Docker?
Да, есть официальный образ caddy. Конфиг монтируется через volume, либо генерируется динамически через Caddy API. Часто связку Caddy + Docker предпочитают для лёгких микросервисов.
Где Caddy хранит сертификаты?
По умолчанию в /var/lib/caddy/.local/share/caddy/certificates. При переустановке имеет смысл сохранить эту папку, чтобы не упереться в rate-limit Let's Encrypt.