Почему Caddy лучше Nginx для HTTPS?
Настройка HTTPS и reverse proxy в Nginx требует множества ручных операций, особенно при добавлении новых доменов. Caddy — веб-сервер нового поколения, который решает эти проблемы автоматически: он получает и продлевает SSL-сертификаты через Let's Encrypt без лишних действий. Мы внедряем Caddy для клиентов уже много лет — сервер работает без сбоев, а время на развёртывание сокращается в три раза по сравнению с Nginx + certbot. По данным официальной документации Caddy, автоматическое обновление сертификатов происходит за 30 дней до истечения срока.
Caddy избавляет от рутины: конфигурация в 10 строк заменяет десятки директив Nginx. Автоматический HTTPS работает «из коробки» — не нужно открывать порты для ACME или писать cron для обновления. Встроенный reverse proxy с балансировкой нагрузки подходит для микросервисов и Node.js-приложений. Кроме того, Caddy поддерживает HTTP/3 из коробки, что даёт прирост скорости на мобильных сетях. Caddy потребляет в 2 раза меньше памяти, чем Apache при той же нагрузке, что подтверждают тесты производительности.
Как Caddy упрощает управление SSL?
Caddy автоматически получает и продлевает SSL-сертификаты для всех доменов, указанных в Caddyfile. Сервер сам проверяет срок действия и обновляет сертификаты за 30 дней до истечения. Это исключает ошибку «SSL expired» и связанные с ней простои. Для wildcard-сертификатов достаточно добавить DNS-провайдера в блок tls. Поддерживаются более 50 провайдеров: Cloudflare, AWS Route53, DigitalOcean и другие.
Установка и настройка Caddy
Как установить Caddy на сервер?
Поддерживаем Debian/Ubuntu, CentOS, Alpine. Установка на Debian выполняется в несколько шагов:
- Подключите репозиторий Caddy.
- Установите пакет caddy.
- Запустите сервис и проверьте статус.
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-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/caddy-stable-archive-keyring.gpg] https://dl.cloudsmith.io/public/caddy/stable/deb/debian any-version main" | tee /etc/apt/sources.list.d/caddy-stable.list
apt update && apt install caddy
После установки Caddy запускается как systemd-сервис. Проверьте статус: systemctl status caddy.
Пример Caddyfile
# /etc/caddy/Caddyfile
example.com {
root * /var/www/myapp/public
php_fastcgi unix//var/run/php/php8.3-fpm.sock
try_files {path} /index.php?{query}
encode gzip
header {
Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
X-Frame-Options "DENY"
X-Content-Type-Options "nosniff"
Referrer-Policy "strict-origin-when-cross-origin"
-Server
}
@static {
path *.css *.js *.jpg *.png *.gif *.ico *.svg *.woff2
}
header @static Cache-Control "public, max-age=31536000, immutable"
@dotfiles {
path /.*
}
respond @dotfiles 403
log {
output file /var/log/caddy/access.log
format json
}
}
api.example.com {
reverse_proxy localhost:3000 {
header_up X-Real-IP {remote_host}
header_up X-Forwarded-Proto {scheme}
}
}
www.example.com {
redir https://example.com{uri} permanent
}
Этот Caddyfile обслуживает PHP-приложение, проксирует API на Node.js, настраивает заголовки безопасности и кеширование статики. Для нескольких сайтов просто добавьте новые блоки.
Интеграция с Docker
Используйте официальный образ caddy:2-alpine. Примонтируйте Caddyfile и тома для сертификатов:
# docker-compose.yml
services:
caddy:
image: caddy:2-alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
- caddy_config:/config
restart: unless-stopped
volumes:
caddy_data:
caddy_config:
Такой подход упрощает деплой и обновление. Caddy автоматически подхватывает изменения Caddyfile без перезапуска контейнера.
Сравнение с аналогами
Caddy vs Nginx
| Критерий | Caddy | Nginx |
|---|---|---|
| SSL/TLS | Автоматический (Let's Encrypt) | Ручной через certbot |
| Конфигурация | Caddyfile (5–15 строк) | nginx.conf (30+ строк) |
| Производительность | До 1 млн запросов/с | До 2 млн запросов/с |
| Поддержка HTTP/3 | Встроенная | Требует отдельной сборки |
| Управление через API | Есть (REST) | Нет встроенной |
Caddy выигрывает по простоте и безопасности, сокращая время настройки SSL в три раза по сравнению с Nginx + certbot. Однако для тонкой настройки под специфичные сценарии Nginx остаётся гибче.
Caddy vs Apache
| Критерий | Caddy | Apache |
|---|---|---|
| Конфигурация | Caddyfile (5–15 строк) | .htaccess + httpd.conf (50+ строк) |
| Производительность | До 1 млн запросов/с | До 500 тыс. запросов/с |
| Автоматический HTTPS | Встроенный | Требует модуля mod_md |
| Поддержка HTTP/2/3 | Встроенная | HTTP/3 через модуль |
Caddy значительно проще в настройке, особенно для HTTPS. Apache требует больше ресурсов на конфигурирование и обслуживание.
Что входит в настройку Caddy
- Диагностика текущей инфраструктуры и выбор оптимальной конфигурации Caddy.
- Установка и настройка Caddy с автоматическим HTTPS и reverse proxy.
- Разработка Caddyfile под ваш стек: PHP, Node.js, статика.
- Интеграция с Docker для контейнеризации.
- Настройка безопасности: заголовки, ограничения доступа, логирование.
- Тестирование производительности и оптимизация.
- Документация по конфигурации и инструкции по поддержке.
- Обучение команды основам работы с Caddy.
- Гарантийная поддержка после внедрения (2 недели).
Процесс и сроки
Мы не просто настраиваем Caddy — мы внедряем его в вашу инфраструктуру с гарантией стабильности.
- Базовая конфигурация одного сайта: 1 день.
- Комплексный проект (несколько сайтов, Docker, мониторинг): 3–5 дней.
Оценка — бесплатно. Свяжитесь, чтобы обсудить ваш проект. Получите консультацию по настройке Caddy для вашего стека.
За много лет работы мы внедрили Caddy на сотнях проектов и готовы поделиться опытом.
Настройка wildcard-сертификатов в Caddy
Для получения wildcard-сертификата *.example.com укажите домен с *. в Caddyfile:
*.example.com {
tls {
dns cloudflare {env.CF_API_TOKEN}
}
reverse_proxy localhost:8080
}
Caddy сам запросит сертификат через DNS-01 challenge. Убедитесь, что у DNS-провайдера есть API-доступ.
Caddy предоставляет REST API для управления конфигурацией на лету — это упрощает автоматизацию и интеграцию с CI/CD. Используйте Caddy API для динамического добавления сайтов без перезагрузки сервера. Подробнее читайте в официальной документации Caddy.







