Caddy — веб-сервер и reverse proxy, написанный на Go. Главное отличие от Nginx и Apache: Caddy автоматически получает и обновляет SSL-сертификаты через Let's Encrypt без дополнительной настройки.
Как работает автоматический HTTPS
При первом запуске Caddy читает конфигурацию, находит все имена хостов и автоматически выполняет ACME (Automatic Certificate Management Environment) challenge у Let's Encrypt. Сертификат получен — HTTPS настроен. Обновление происходит за 30 дней до истечения без вмешательства администратора. Caddy хранит сертификаты в ~/.local/share/caddy (Linux) или запрашивает через ZeroSSL как альтернативный CA.
Конфигурация сравнима по объёму: аналогичный виртуальный хост в Nginx занимает 20–30 строк с учётом certbot, в Caddy — 5–8 строк.
Caddyfile
Минимальный пример для PHP-сайта:
example.com {
root * /var/www/html
php_fastcgi localhost:9000
file_server
encode gzip
}
Caddy автоматически добавляет HTTPS, OCSP Stapling, HTTP/2 и редиректы HTTP → HTTPS. Конфигурацию можно менять на лету через REST API без перезагрузки: POST /load с JSON-конфигом.
Архитектура
Написан на Go — горутины позволяют обрабатывать тысячи соединений с минимальным потреблением памяти (~30 МБ в базовой конфигурации). Поддерживает HTTP/3 (QUIC) начиная с версии 2.4. Плагины расширяют функциональность: caddy-dns для DNS-01 challenge, caddy-security для аутентификации.
Caddy vs Nginx
| Параметр | Caddy | Nginx |
|---|---|---|
| HTTPS | Автоматически | Certbot + cron |
| Конфигурация | Caddyfile (проще) | nginx.conf (гибче) |
| Wildcard SSL | Через DNS-01 плагин | Certbot + DNS plugin |
| HTTP/3 | Из коробки с v2.4 | Нужна сборка с QUIC |
| Экосистема | Меньше модулей | Сотни модулей |
| Документация | Хорошая | Обширная |
История
Caddy создан Мэттом Холтом (Matt Holt) в 2015 году как проект с открытым исходным кодом. Версия 1.x использовала проприетарную лицензию для коммерческого использования. Caddy 2.0 вышел в мае 2020 года — полностью open source под лицензией Apache 2.0. Переписан с нуля: JSON-конфигурация вместо Caddyfile (Caddyfile стал слоем поверх JSON). К 2024 году — более 55 000 звёзд на GitHub.
На что обращать внимание
Caddy подходит для разработчиков и небольших команд, которым нужен простой HTTPS без ручного управления certbot. Для высоконагруженных production-систем с тонкой настройкой кэширования и буферизации Nginx даёт больше контроля. Caddy использует Let's Encrypt API — при частых перезапусках на тестовом сервере можно упереться в rate limit (50 сертификатов/домен/неделю). На тестовых стендах использовать staging-API: acme_ca https://acme-staging-v02.api.letsencrypt.org/directory.
Примечание
Caddy хранит сертификаты в формате .crt и обновляет их автоматически — никакого ручного управления certbot не требуется.