Caddy: веб-сервер, который сам получает сертификаты
Сервер на Go, в котором HTTPS включён по умолчанию, а конфиг помещается в три строки. Зачем он нужен, когда есть nginx, и где его слабые места.
Три строки
Вот полная конфигурация, которая отдаёт сайт по HTTPS с автоматическим сертификатом Let's Encrypt, редиректом с HTTP и проксированием на приложение:
example.com {
reverse_proxy localhost:4000
}
То же самое для nginx потребует отдельно установить certbot, настроить обновление по крону, прописать пути к сертификатам, добавить блок для редиректа и не забыть перезагрузить сервер после обновления. Caddy делает всё это сам, включая продление за месяц до истечения и выбор между Let's Encrypt и ZeroSSL, если один из них недоступен.
Что внутри
Caddy написан на Go и распространяется одним бинарником без зависимостей. Конфигурация в формате Caddyfile компилируется во внутренний JSON, и тот же JSON можно менять на лету через локальный API без перезапуска. Это удобно для оркестраторов и для скриптов, которые добавляют домены по мере появления клиентов.
Из коробки есть то, что в nginx обычно собирается из модулей и дополнений:
- HTTP/2 и HTTP/3 без дополнительной настройки.
- Сжатие gzip и zstd одной директивой
encode. - Статика, реверс-прокси с балансировкой и проверками здоровья, FastCGI для PHP.
- Сертификаты по ACME, включая wildcard через DNS-провайдеров.
- Локальный центр сертификации для
localhostв разработке.
Сценарии
Главный сценарий Caddy: одна машина, несколько приложений, нет желания становиться администратором. Директива reverse_proxy с несколькими адресами даёт балансировку, handle_path разводит пути по разным сервисам, basicauth закрывает панель администратора.
Второй сценарий: SaaS с доменами клиентов. Директива on_demand_tls выпускает сертификат при первом запросе к неизвестному домену, предварительно спросив у вашего приложения, обслуживать ли его. У nginx такого режима нет в принципе.
Где он уступает
На тяжёлых нагрузках nginx по-прежнему экономнее по памяти и процессору. Разница не драматическая, но на сервере с десятками тысяч одновременных соединений она заметна. Экосистема модулей меньше, а сами модули требуют пересборки бинарника через xcaddy. Документация местами отстаёт от возможностей, и нужные примеры чаще находятся на форуме, чем в справочнике.
Вывод
Для подавляющего большинства проектов, которые живут на одном-двух серверах, Caddy убирает целый класс рутины. Если вы помните, когда у вас последний раз истёк сертификат в проде, вы знаете, о какой рутине речь.
Войти, чтобы оценить материал
Комментарии
Войти, чтобы оставить комментарий