Как настроить Caddy в качестве обратного прокси
Освойте перенаправление трафика с помощью нашего руководства по Caddy. Настройте Caddy в качестве обратного прокси-сервера и быстро оптимизируйте доступ к вашим сервисам.
Caddy — это современный веб-сервер с открытым исходным кодом, написанный на Go. Он отличается простотой, мощностью и возможностями автоматического получения и обновления SSL-сертификатов. В отличие от традиционных веб-серверов, Caddy известен своей простотой использования, с упором на автоматизацию и безопасность по умолчанию.
Но возможности Caddy выходят за рамки обслуживания статических веб-сайтов и приложений; он выступает в качестве обратного прокси — сервера, который находится перед внутренними приложениями и перенаправляет запросы клиентов (например, веб-браузера) на соответствующий сервер.
Выбор Caddy в качестве обратного прокси-сервера — мудрый шаг. Хотя существуют альтернативы, такие как Nginx, пользующиеся широкой популярностью, они требуют немного более сложной настройки по сравнению с Caddy. Traefik, еще один отличный выбор, предлагает замечательную мощность и гибкость, особенно для облачных решений, однако сложность его настройки значительно выше.
Это подчеркивает, почему Caddy выделяется как лучший вариант для тех, кто ищет решение обратного прокси, которое сочетает в себе простоту использования со скоростью, безопасностью и надежностью, проверенными в многочисленных производственных средах.
В этой подробной статье мы углубимся в то, как использовать Caddy в качестве обратного прокси-сервера, и проведем вас через процесс установки и настройки. Мы рады показать вам, насколько просто начать работу с Caddy. Итак, давайте погрузимся.
Установить Кэдди
Сразу же кое-что проясним: вы можете либо установить Caddy напрямую через менеджер пакетов вашего дистрибутива Linux, либо настроить его как контейнер Docker, если вы предпочитаете настройки на основе контейнеров. В этом руководстве мы рассмотрим оба варианта, начиная с установки в виде пакета.
В зависимости от используемого вами дистрибутива используйте соответствующую команду:
Дебиан, Убунту, Линукс Минт
sudo apt install caddy
RHEL, Fedora, AlmaLinux, Rocky Linux
sudo dnf install 'dnf-command(copr)'
sudo dnf copr enable @caddy/caddy
sudo dnf install caddy
sudo systemctl enable caddy
sudo systemctl start caddy
Арч Линукс, Манджаро
sudo pacman -S caddy
sudo systemctl enable caddy
sudo systemctl start caddy
Настройте Caddy в качестве обратного прокси-сервера
Начнем с пояснения нашей установки. Caddy обычно используется в качестве обратного прокси-сервера для маршрутизации трафика к контейнерным приложениям, работающим за ним, поэтому мы будем следовать этому шаблону. Для демонстрации мы выбрали два примера контейнерных приложений: программу чтения FreshRSS и приложение для создания заметок Memos, которые работают на портах 1080 и 5230 соответственно.
Конечно, вы можете работать со многими приложениями — 10, 20, 100 или более. Caddy вполне способен без проблем справиться с такими тяжелыми нагрузками. Мы выбрали всего два приложения, чтобы сделать все максимально простым и понятным.
Чтобы узнать, на каких портах работают ваши Dockerized-приложения, вы можете быстро и легко сделать это, выполнив следующую команду:
docker container ls --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}" -a
Давайте теперь обсудим записи домена, которыми будет управлять Caddy. В этом руководстве мы используем «tmplinux.com» — домен, которым мы владеем и который используем для тестов. Мы назначим две конкретные записи DNS: «rss.tmplinux.com» для приложения FreshRSS и «memos.tmplinux.com» для приложения для создания заметок Memos. на сервер, на котором работает Caddy.
Однако, если у вас нет собственного домена, вы всегда можете установить произвольную запись в файле «/etc/hosts». Но если вы не знаете, как это сделать, наше подробное руководство все объясняет.
Вот как выглядит наш производственный процесс, чтобы вы могли лучше понять его визуально.
Теперь, когда все ясно, давайте перейдем непосредственно к делу: настройка Caddy для выполнения задач обратного прокси.
Отредактируйте Caddyfile
Все, что нам нужно сделать, это ввести очень простые инструкции в основной файл конфигурации Caddy с именем «Caddyfile» в каталоге «/etc/caddy/».
Он сообщает Caddy, как обслуживать веб-контент, автоматически управлять сертификатами HTTPS, маршрутизировать запросы и выполнять другие задачи веб-сервера с минимальной настройкой. Проще говоря, это набор инструкций, которые помогают Caddy эффективно взаимодействовать с веб-трафиком и управлять им.
Откройте его в предпочитаемом вами текстовом редакторе, удалите существующее содержимое и замените его показанным ниже. Сразу объясните его значение.
sudo nano /etc/caddy/Caddyfile
{
auto_https off
}
rss.tmplinux.com:80 {
reverse_proxy localhost:1080
}
memos.tmplinux.com:80 {
reverse_proxy localhost:5230
}
Начальный раздел представляет собой блок глобальных параметров, в котором хранятся настройки, применимые ко всему серверу Caddy. Мы указали для параметра «auto_https» в этом блоке значение «off». Это говорит Caddy отключить такие функции, как автоматическое предоставление сертификата SSL и автоматическое перенаправление с HTTP на HTTPS. Для получения дополнительной информации вы можете посмотреть здесь.
Следующие два раздела определяют доменные имена, которые будет обслуживать Caddy. Он будет принимать запросы через порт 80 и использовать опцию «reverse_proxy», чтобы перенаправить их на открытые порты наших приложений Docker. Поскольку эти приложения размещены на одном компьютере, мы указали адрес «localhost».
Перезапустите службу Caddy.
Наконец, сохраните файл, выйдите и перезапустите Caddy:
sudo systemctl restart caddy
Убедитесь, что Caddy работает:
sudo systemctl status caddy
Тестирование, все ли работает так, как ожидалось
Если вы укажете в своем браузере субдомены в «Caddyfile», Caddy будет действовать как обратный прокси-сервер и гарантировать, что ваши запросы будут направлены в правильные контейнеры на основе имен субдоменов.
Насколько это может быть проще? С помощью всего лишь нескольких строк конфигурации мы настроили надежный обратный прокси-сервер с помощью Caddy. Далее давайте рассмотрим возможность не устанавливать Caddy непосредственно из пакета, а вместо этого запустить его в контейнере Docker.
Настройте Caddy в качестве обратного прокси в контейнере Docker
Чтобы настроить Caddy в качестве обратного прокси-сервера внутри контейнера Docker, важно обеспечить выполнение двух ключевых требований:
- Caddy и контейнеры, которым он будет перенаправлять запросы, должны находиться в одной сети Docker.
- В «Caddyfile» вы должны ссылаться на контейнеры по их именам.
Настройка сети Docker
Итак, сначала давайте создадим нашу сеть Docker, выбрав в качестве имени «reverse_proxy».
docker network create reverse_proxy
Далее проверим, что всё в порядке и сеть доступна.
docker network ls
Настройка файла Caddy Docker
Создайте каталог «caddy» и перейдите в него.
mkdir caddy
cd caddy
Мы будем развертывать Caddy с помощью Docker Compose. Если это для вас что-то новое, не волнуйтесь: наше подробное руководство быстро поможет вам освоиться.
Откройте текстовый редактор и создайте файл «docker-compose.yaml». Вставьте содержимое, представленное ниже, сохраните его и выйдите.
nano docker-compose.yaml
version: '3.8'
services:
caddy:
container_name: caddy
image: caddy:alpine
restart: always
ports:
- 80:80
- 443:443
networks:
- reverse_proxy
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
- caddy_config:/config
volumes:
caddy_data:
caddy_config:
networks:
reverse_proxy:
external: true
Создать Caddyfile
Теперь давайте подготовим нашу конфигурацию «Caddyfile», которая, как показано в файле «docker-compose.yaml» выше, монтируется непосредственно из локального каталога хоста в Кэдди-контейнер.
nano Caddyfile
{
auto_https off
}
rss.tmplinux.com:80 {
reverse_proxy freshrss:80
}
memos.tmplinux.com:80 {
reverse_proxy memos:5230
}
Здесь все во многом похоже, но есть существенное отличие: приложения идентифицируются по имени контейнера. Если вы не уверены в точном имени контейнера, его можно быстро найти, выполнив:
docker ps --format '{{.Names}}'
Кроме того, порт, указанный в примере, например «freshrss:80» или «memos:5230», не является портом, которому контейнер сопоставляется на узле. Вместо этого это порт, который прослушивает приложение внутри контейнера.
Связывание оставшихся контейнеров с сетью Docker Caddy
Опять же, Caddy должен использовать одну и ту же сеть с контейнерами, в которые он перенаправляет запросы, чтобы иметь возможность взаимодействовать с ними. Это требует изменения их развертываний. Например, корректировка, внесенная в наше развертывание FreshRSS, включает добавление сетевой части «reverse_proxy», как показано ниже:
Убедитесь, что вы перезапустили контейнеры после изменений. Как только это будет сделано, вы готовы приступить к запуску контейнера Caddy:
docker-compose up -d
Направьте свой браузер по указанным адресам и испытайте удобные возможности обратного прокси-сервера Caddy в контейнерной среде.
Получение SSL-сертификата с помощью Caddy
Одной из выдающихся особенностей Caddy является способность автоматически получать и обновлять сертификаты SSL, что значительно упрощает настройку и обслуживание защищенных веб-сайтов.
Caddy использует протокол автоматической среды управления сертификатами (ACME) для взаимодействия со бесплатными центрами сертификации (CA), такими как Let’s Encrypt. Таким образом, когда вы настраиваете сайт с помощью Caddy, он автоматически связывается с ним для получения сертификата SSL для вашего сайта, обеспечивая тем самым безопасное соединение HTTPS.
Однако сертификаты Let’s Encrypt SSL/TLS имеют ограниченный срок действия — 90 дней, и их необходимо периодически обновлять для обеспечения безопасности веб-сайта. Хорошей новостью является то, что Caddy автоматизирует этот процесс обновления.
Он проверяет дату истечения срока действия сертификатов и автоматически продлевает их до истечения срока их действия, практически сводя к нулю необходимость обслуживания с вашей стороны. Теперь вернемся к нашему случаю.
В приведенных выше примерах мы явно отключили стандартное поведение Caddy по автоматической выдаче сертификатов SSL, установив параметр «auto_https off» в блоке глобальных параметров Caddy.
{
auto_https off
}
Важно отметить, что удаления строки «auto_https off» достаточно, чтобы Caddy начал автоматически выдавать сертификаты SSL, поскольку это его поведение по умолчанию.
Однако на его место мы добавим еще один вариант — «электронная почта», после которого будет указан ваш адрес электронной почты. Этот подход настоятельно рекомендуется при создании учетной записи ACME в вашем центре сертификации, чтобы обеспечить бесперебойную обработку проблем с сертификатами.
Кроме того, обновите «Caddyfile», чтобы настроить порты для служб (суб)домена Caddy на целевой порт 443. Окончательная версия должна выглядеть следующим образом:
{
email your@email.address
}
rss.tmplinux.com:443 {
reverse_proxy freshrss:80
}
memos.tmplinux.com:443 {
reverse_proxy memos:5230
}
Теперь перезапустите службу Caddy:
sudo systemctl restart caddy
Если вы используете Docker, остановите и перезапустите контейнер Caddy:
docker-compose down
docker-compose up -d
Открывая свои приложения в веб-браузере, вы заметите, что Caddy автоматически выдает действительные сертификаты SSL в фоновом режиме. Доступ к адресам теперь осуществляется через HTTPS, что обозначается значком замка в адресной строке.
Заключение
Caddy — исключительный выбор для пользователей, которым требуется решение обратного прокси-сервера, простое в использовании, безопасное и надежное по функциям.
Его простая настройка и возможность автоматического управления SSL-сертификатами делают его предпочтительным вариантом по сравнению с традиционными веб-серверами, такими как Nginx, и более сложными альтернативами, такими как Traefik, особенно для пользователей, ценящих простоту.
Настройка Caddy в качестве обратного прокси-сервера может значительно упростить управление и перенаправление трафика на ваши сервисы. Следуя инструкциям, описанным в нашем руководстве, вы сможете быстро настроить Caddy для эффективной обработки перенаправления трафика.
Наконец, для получения дополнительной информации посетите документацию проекта или его веб-сайт. Спасибо, что следовали вместе с нашим гидом! Пожалуйста, дайте мне знать в разделе комментариев ниже, если у вас есть какие-либо вопросы.