Caddy: установка и настройка прокси-сервера

Сегодня расскажем о том, как установить и настроить Caddy на Ubuntu, а также использовать  Caddy с собственным сертификатом SSL.

Caddy – reverse proxy (реверс-прокси) и веб-сервер, написанный на языке Go, отличительными особенностями которого являются простота конфигурации и автоматическое получение сертификатов SSL без необходимости настройки дополнительного ПО.

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

В этой статье мы будем рассматривать установку Caddy на дистрибутив Linux Ubuntu. Caddy на Ubuntu 24.04 доступен для установки из репозиториев Ubuntu. 

Обновите базу данных apt командой:

sudo apt update

После чего установите сервер Caddy:

sudo apt install caddy

Затем проверьте успешность установки, выполнив команду проверки версии:

caddy version

Пример корректного вывода:

2.6.2

Настройка Caddy

Два основных метода для настройки прокси-сервера Caddy – Caddyfile+CLI и JSON+API. Caddyfile+CLI хорошо подходит для ручной настройки и покрывает большую часть функционала Caddy, позволяя легко решать рядовые задачи, но сложнее автоматизируется. В то же время использование JSON+API позволяет легко автоматизировать и масштабировать конфигурацию, а также более тонко ее настраивать.

В рамках данной статьи мы будем использовать Caddyfile в приведенных примерах, поскольку его достаточно для решения рядовых задач и он проще в освоении. 

Настройку можно производить как в основном файле Caddyfile, так и создавая отдельные файлы для каждого сайта. В рамках данной статьи все изменения будут производиться в основном файле Caddyfile.

Статический сайт

В качестве примера рассмотрим развертывание статического сайта на домене static.betutorial.ru. Архив с примером статического сайта доступен по ссылке.

Создайте директорию под сайт:

sudo mkdir -p /var/www/mysite

После чего перейдите в нее командой:

cd /var/www/mysite

Загрузите архив с файлами сайта в директорию командой:

wget https://cp.beget.com/shared/mSEkKCH1S2dHZhnBnUNhVGod5JXQUJHB/static_site_sample.tgz

Распакуйте и удалите архив:

tar xf static_site_sample.tgz --strip 1
rm static_site_sample.tgz

Скорректируйте владельца директории /var/www:

sudo chown -R www-data:www-data /var/www

Затем перейдите в директорию /etc/caddy/:

cd /etc/caddy

Откройте файл конфигурации удобным вам текстовым редактором, например, vim:

sudo vim Caddyfile

После чего добавьте в него следующий блок:

domain {
    # Директория сайта
    root * /var/www/mysite

    # Включение отдачи статики
    file_server
}

domain в конфигурации измените на используемое вами доменное имя.

Затем сохраните файл и закройте редактор. Выполните команду проверки конфигурации:

sudo caddy validate

Если ошибок не возникло, обновите конфигурацию Caddy командой:

sudo caddy reload

После чего проверьте работу сайта по указанному домену – если вы использовали файлы из примера, должна отобразиться следующая страница:

статический сайт

PHP

Веб-сервер Caddy может выступать в качестве реверс-прокси для различных приложений, в том числе для написанных на PHP – для них есть специальная директива php_fastcgi, упрощающая настройку проксирования. В качестве примера php-приложения рассмотрим процесс развертывания сайта на WordPress. Для этого установите php-fpm и необходимые модули:

sudo apt update
sudo apt install php-fpm
sudo apt install php php-mysql php-mbstring php-bcmath php-zip php-gd php-curl php-xml

Также потребуется установить сервер MySQL.

sudo apt install mysql-server

Создайте директорию под сайт командой:

sudo mkdir -p /var/www/wp1

Загрузите файлы сайта и дамп базы данных в созданную директорию удобным вам способом, после чего измените владельца файлов командой:

sudo chown -R www-data:www-data /var/www/wp1

А также скорректируйте права:

sudo chmod -R 750 /var/www/wp1

Сгенерируйте и сохраните в переменную случайный пароль командой:

export PASS=$(openssl rand -base64 20); echo $PASS

Скопируйте полученную строку и сохраните ее – она потребуется впоследствии при настройке подключения к базе данных.

Для создания БД с названием wp1 и пользователя wp1 с правами на управление ею выполните следующие команды:

mysql -u root -e 'create database wp1'
mysql -u root -e "create user wp1 identified with mysql_native_password by '$PASS'"
mysql -u root -e "grant all privileges on wp1.* to wp1"

После чего загрузите дамп БД вашего сайта на сервер удобным вам способом и импортируйте его в созданную БД командой:

mysql -u wp1 -p$PASS wp1 < путь_до_файла_дампа

После успешного импорта дамп БД с сервера можно удалить.

rm путь_до_файла_дампа

Отредактируйте конфигурационный файл /var/www/wp1/wp-config.php, указав в нем данные для подключения к БД:

  • DB_NAME – название БД, в примере выше – wp1;
  • DB_USER – имя созданного пользователя БД, в примере выше – wp1;
  • DB_PASSWORD – пароль, сгенерированный для пользователя БД.

Перейдите в директорию /etc/caddy командой:

cd /etc/caddy

Откройте конфигурационный файл Caddyfile удобным вам текстовым редактором, например, vim:

sudo vim Caddyfile

После чего добавьте новый блок следующего вида:

domain.name {
    file_server
    encode gzip
    root * /var/www/wp1
    php_fastcgi unix//run/php/php-fpm.sock

    # Опциональное логирование
    log {
        output file /var/log/caddy/access.log
        format console
    }
    @disallowed {
        path /xmlrpc.php
        path *.sql
        path /wp-content/uploads/*.php
    }

    rewrite @disallowed '/index.php'
}

domain.name потребуется изменить на используемое вами доменное имя.

Сохраните файл и закройте редактор. Проверьте корректность конфигурации командой:

sudo caddy validate

Если ошибок не возникло – перезагрузите Caddy для использования новой конфигурации командой:

sudo caddy reload

Затем проверьте работу сайта.

Использование Caddy с собственным сертификатом SSL

В некоторых ситуациях может потребоваться установка собственного сертификата SSL – например, когда сайт находится под защитой Cloudflare и использует режим Full или Full(strict). Для таких случаев в Caddy есть директива tls, позволяющая изменить стандартное поведение для SSL-сертификатов.

Использование самоподписанного сертификата

Caddy поддерживает автоматическую генерацию и использование самоподписанного сертификата, что может быть полезно, например, при использовании режима Full в Cloudflare. Для этого добавьте в блок сайта директиву tls internal. На примере блока domain.name:

domain.name {
    tls internal
}

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

sudo caddy reload

Установка собственного сертификата

Для установки собственного сертификата потребуется загрузить файлы сертификата и ключа на сервер, поместить их в директорию, доступную для чтения Caddy, и настроить сайт на их использование.

Рассмотрим настройку на примере установки сертификата Cloudflare. Сгенерируйте сертификат в личном кабинете Cloudflare:

cloudflare генерация сертификата

На следующей странице скопируйте сертификат в формате PEM и сохраните его в файл /etc/ssl/certs/certificate.pem на сервере. Также скопируйте ключ и сохраните его в файл /etc/ssl/private/key.pem на сервере.

Перейдите в директорию /etc/caddy:

cd /etc/caddy

Откройте Caddyfile удобным вам текстовым редактором и отредактируйте конфигурацию, добавив в нее следующую строку в блок сайта:

domain.name {
   tls /etc/ssl/certs/certificate.pem /etc/ssl/private/key.pem
}

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

sudo caddy reload

И проверьте работу сайта.

Готово! Caddy – обратный прокси-сервер на Ubuntu – установлен и готов к использованию. В данной статье мы рассмотрели установку reverse proxy, а также несколько примеров использования, однако функционал данного ПО не ограничивается описанным в данной статье. Более подробную информацию о доступных опциях и способах настройки вы можете найти в документации Caddy.

Если возникнут вопросы, напишите нам, пожалуйста, тикет из панели управления аккаунта (раздел “Помощь и поддержка”), а если вы захотите обсудить эту статью или наши продукты с коллегами по цеху и сотрудниками Бегета – ждем вас в нашем сообществе в Telegram.

7
1155