Конфигурация Caddy для on-demand-сертификатов и wildcard-доменов с поддержкой Cloudflare
Встала тут одна задача, сделать reverse proxy, который будет проксировать трафик и для определённых доменов выпускать новые сертификаты налету, а для некоторых нужно просто автоматически выпустить сертификат.
Для такой задачи идеально подходит Caddy
Что такое Caddy?
Caddy - веб-сервер с открытым исходным кодом и автоматическим HTTPS, написанный на Go
Сертификат для статичных доменов
Для работы с Caddy нужно создать Caddyfile
Это минимальный набор, который нужен для того, что бы Caddy вообще запустился, продолжим. Сначала разберемся со статичными доменами. Для того что бы Caddy запросил сертификат для такого домена, нужно просто добавить его в конфиг.
Вот и все, при старте, Caddy прочитает конфиг и запустит выпуск сертификата для этого домена через Let'sEncrypt посредством http челленджа.
Как быть с wildcard?
Тут тоже все просто (особенно если у вас cloudflare). Нам нужно просто добавить wildcard домен в Caddyfile, но есть один нюанс. Вот так выглядит обновленный конфиг:
Когда мы используем wildcard домен в конфиге, мы обязаны использовать DNS challenge вместо http, а для этого нам нужно дать разрешение Caddy на добавление записи в DNS. В данном случае я использую Cloudflare DNS и плагин для работы с ним.
Вот и все, теперь у вас есть рабочий Reverse Proxy, который выпишет сертификат для my-site.com и wildcard *.my-site.com!
Теперь о on-demand (по требованию) сертификатах
Вот такой небольшой конфиг позволит автоматически выдавать сертификаты для test.* доменов.
А что если наш https://your-api.com/check-domain требует авторизации?
Бонус для тех кто дочитал
А для самых терпеливых у меня есть приятный бонус, пользуйтесь! Dockerfile с помощью которого можно это все запустить.
Вот и все, жду вашего отклика :)
Заглядывайте в мой Telegram-канал @devdrafts_rss, где я делюсь материалами по IT, которые сам употребляю 🙂
Недавно услышал про Caddy, но еще не пользовался. Сам использую Traefik как реверс-прокси для Docker контейнеров.
Там очень удобно, что реверс-прокси сам конфигурируется в зависимости от меток контейнеров, то есть можно просто поднять docker compose и на него автоматически будет направляться трафик и выдаваться сертификаты.
Есть ли что-то подобное в Caddy? По сути это service discovery
Traefik я не использовал, мне Caddy показался более простым в настройке для моей задачи :) Но на сколько я читал, в Caddy есть аналог для решения этой задачи, через плагин https://github.com/lucaslorentz/caddy-docker-proxyю. Он тоже на основе меток может автоматически настроить маршрутизацию контейнеров :)
Спасибо за коммент, хорошая тема для следующей статьи, записал :)