Найти в Дзене
P3TP0

Caddy — лучший reverse прокси! Как установить и пользоваться

Caddy представляет собой обратный прокси-сервер, написанный на языке Go. Это полностью бесплатный проект с открытым исходным кодом с лицензией Apache 2.0. Caddy поддерживает HTTP/2, HTTP и HTTPS, позволяет автоматически получать и обновлять сертификаты Let's Encrypt. Обладает кроссплатформенностью: можно установить на любую ОС, а также поддерживает разные архитектуры процессоров. Также Caddy можно использовать просто в Docker-контейнере. Как раз таки я буду использовать Caddy в Docker, ибо так будет проще и удобнее работать с данным обратным прокси-сервером. Создайте в удобной Вам директории папку для хранения docker-compose файла, конфигурационного файла и данных Caddy, например, по пути /opt/docker/caddy. В данной папке необходимо создать docker-compose.yml, который имеет следующее содержание: version: "3.7"
services:
caddy:
image: caddy:latest
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "443:443/udp"
volume
Оглавление

Введение

Caddy представляет собой обратный прокси-сервер, написанный на языке Go. Это полностью бесплатный проект с открытым исходным кодом с лицензией Apache 2.0.

Caddy поддерживает HTTP/2, HTTP и HTTPS, позволяет автоматически получать и обновлять сертификаты Let's Encrypt. Обладает кроссплатформенностью: можно установить на любую ОС, а также поддерживает разные архитектуры процессоров. Также Caddy можно использовать просто в Docker-контейнере.

Как раз таки я буду использовать Caddy в Docker, ибо так будет проще и удобнее работать с данным обратным прокси-сервером.

Установка Caddy в Docker

Создайте в удобной Вам директории папку для хранения docker-compose файла, конфигурационного файла и данных Caddy, например, по пути /opt/docker/caddy.

В данной папке необходимо создать docker-compose.yml, который имеет следующее содержание:

version: "3.7"
services:
caddy:
image: caddy:latest
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "443:443/udp"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./site:/srv
- caddy_data:/data
- caddy_config:/config
extra_hosts:
- "host.docker.internal:host-gateway"
networks:
- caddy
volumes:
caddy_data:
caddy_config:
networks:
caddy:
name: caddy
docker-compose.yml

Далее необходимо создать в этой же директории пока что пустой файл с названием Caddyfile и пустую папку с названием site.

После этого запускаем docker-compose.yml:

docker-compose up -d

Если все запустилось без ошибок, то можно начинать пользоваться данным обратным прокси-сервером!

Использование Caddy

Допустим, у Вас есть Moodle, который развернут в Docker, на той же машине, где мы подняли Caddy. И Вы хотите, чтобы этот Moodle был доступен по адресу moodle.example.com.

Для этого необходимо иметь доступ к настройкам DNS-записей этого домена, чтобы Вы могли создать там поддомен moodle.example.com, которому укажете в A-записи IP-адрес Вашей машины, на котором развернут Moodle и Caddy.

IP-адрес виртуальной машины должен быть статичным.

После создания нового поддомена необходимо отредактировать Caddyfile, в который будет добавлена соответствующая запись:

-2

moodle.example.com {
reverse_proxy http://moodle.example.com:8082
}


В этой записи необходимо указать порт, на котором работает Ваш сервис. В моем случае — это 8082 порт.

После добавления записи необходимо сохранить Caddyfile и выполнить «мягкий» перезапуск Caddy с применением новой конфигурации при помощи следующей команды:

docker exec -it caddy caddy reload --config /etc/caddy/Caddyfile

Затем нужно дать какое-то время DNS-серверам, чтобы новые записи о Вашем поддомене расползлись по мировой сети, а также дождаться автоматического выпуска сертификата от Let’s Encrypt.

Спустя некоторое время Вы можете перейти на https://moodle.example.com и убедиться, что Ваш сервис успешно проксируется, а также имеет действительный сертификат, который будет автоматически обновляться по истечению срока действия.

И все это благодаря Caddy!

Примечание: на одной виртуальной машине с Docker и Caddy внутри этого Docker Вы можете держать множество сервисов и проксировать всех их через Caddy по описанному мною принципу, пока у Вас не кончатся свободные порты :)