bythe.net
← К ленте
Проект

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 убирает целый класс рутины. Если вы помните, когда у вас последний раз истёк сертификат в проде, вы знаете, о какой рутине речь.

Войти, чтобы оценить материал

Комментарии

Войти, чтобы оставить комментарий