Сегодня всё чаще при развертывании веб-сайтов встаёт вопрос: как организовать надежную, безопасную и при этом простую в управлении инфраструктуру? В этой статье мы разберем, как настроить Caddy — современный веб-сервер и обратный прокси, который отлично подходит для небольших и средних проектов, особенно если вы не хотите тратить часы на конфигурации Nginx или Apache.
Мы подробно рассмотрим установку Caddy на Ubuntu, создание конфигурационного файла для работы со статикой и PHP-приложениями, а также подключение собственного SSL-сертификата, что особенно актуально при использовании прокси вроде Cloudflare.
Caddy — это кроссплатформенный веб-сервер и обратный прокси, написанный на языке Go. Он изначально задумывался как простой в использовании инструмент, который можно поднять за несколько минут и при этом получить полный набор современных возможностей: от автоматического HTTPS до сжатия и проксирования.
В отличие от многих других серверов, Caddy «из коробки» поддерживает автоматическую выдачу SSL-сертификатов через Let's Encrypt. Вам не нужно устанавливать отдельные агенты, прописывать cron-задачи или настраивать certbot — всё делается автоматически. Достаточно указать домен в конфигурации, и Caddy сам обо всём позаботится.
Чтобы начать работу, потребуется всего пара команд. Убедитесь, что у вас установлены актуальные обновления:
sudo apt update
Теперь установим сам сервер:
sudo apt install caddy
Проверить, что установка прошла успешно, можно с помощью:
caddy version
Если вы увидите номер версии, вроде 2.6.2, значит, всё работает.
После установки приходит время настроить Caddy. Здесь разработчики предлагают два подхода:
→ Caddyfile + CLI — самый простой вариант, отлично подходит для небольших сайтов и ручной настройки. Даже новичку будет понятно, что и где прописывать.
→ JSON + API — мощный инструмент для автоматизации и масштабируемых конфигураций. Он больше подойдёт DevOps-инженерам или разработчикам, интегрирующим Caddy в CI/CD-процессы.
В рамках этой статьи мы сосредоточимся на первом варианте — Caddyfile. Он гораздо проще для старта и позволяет быстро достичь результата.
Важно: Caddy допускает хранение конфигурации либо в одном общем Caddyfile, либо в отдельных файлах для каждого сайта. Мы будем использовать единый основной файл, расположенный в /etc/caddy/Caddyfile.
Представим, что у вас есть готовый статический сайт, который нужно разместить на поддомене static.example.com. Сделаем это по шагам.
Сначала создадим директорию, куда будут размещены файлы сайта:
sudo mkdir -p /var/www/static-site
cd /var/www/static-site
Загрузим пример архива с сайтом и распакуем его:
wget https://example.com/static_site_sample.tgz
tar xf static_site_sample.tgz --strip 1
rm static_site_sample.tgz
Теперь установим правильные права на файлы, чтобы сервер мог их обслуживать:
sudo chown -R www-dаta:www-data /var/www
Откроем конфигурационный файл:
sudo nano /etc/caddy/Caddyfile
Добавим следующий блок:
static.example.com {
root * /var/www/static-site
file_server
}
Этот блок указывает Caddy обслуживать файлы из указанной директории при обращении к нужному домену. Команда file_server включает встроенный сервер статики.
Сохраняем файл и проверяем, всё ли правильно:
sudo caddy validate
Если ошибок нет, применим изменения:
sudo caddy reload
Через пару секунд сайт будет доступен в браузере.
Теперь немного усложним задачу — разместим динамический сайт на WordPress, используя Caddy как прокси и веб-сервер.
Начнём с установки необходимых компонентов:
sudo apt install php php-fpm mysql-server
sudo apt install php-mysql php-xml php-gd php-mbstring php-curl php-zip php-bcmath
Создадим директорию под WordPress:
sudo mkdir -p /var/www/wp-site
Загрузим файлы сайта (например, архив WordPress и дамп базы данных) и распакуем их. После этого установим нужные права:
sudo chown -R www-dаta:www-data /var/www/wp-site
sudo chmod -R 750 /var/www/wp-site
Теперь настроим базу данных. Откроем MySQL:
mysql -u root
И выполним следующие команды:
CREATE DATABASE wp_site;
CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'your_secure_password';
GRANT ALL PRIVILEGES ON wp_site.* TO 'wp_user'@'localhost';
EXIT;
Импортируем дамп БД:
mysql -u wp_user -p wp_site < /путь/к/дампу.sql
Затем откроем wp-config.php и пропишем параметры подключения к БД: имя базы, пользователя и пароль.
Теперь настроим Caddy:
sudo nano /etc/caddy/Caddyfile
Добавим конфигурацию:
wordpress.example.com {
root * /var/www/wp-site
php_fastcgi unix//run/php/php-fpm.sock
file_server
encode gzip
log {
output file /var/log/caddy/access.log
format console
}
@blocked {
path /xmlrpc.php
path *.sql
path /wp-content/uploads/*.php
}
rewrite @blocked /index.php
}
Этот блок включает обработку PHP, отдачу файлов и базовую защиту от нежелательных запросов.
Проверяем и перезапускаем:
sudo caddy validate
sudo caddy reload
Готово — ваш WordPress-сайт работает.
Caddy сам заботится об SSL, но бывают случаи, когда нужно использовать собственный сертификат. Например, если сайт проксируется через Cloudflare в режиме Full (Strict), потребуется вручную указать путь к сертификату и ключу.
Вариант 1: использовать встроенный самоподписанный сертификат
Просто добавьте в конфигурацию:
example.com {
tls internal
}
Caddy сгенерирует сертификат самостоятельно.
Вариант 2: загрузить свой сертификат
Разместите .pem-файлы на сервере:
→ Сертификат: /etc/ssl/certs/certificate.pem
→ Закрытый ключ: /etc/ssl/private/key.pem
И укажите их в конфигурации:
example.com {
tls /etc/ssl/certs/certificate.pem /etc/ssl/private/key.pem
}
После этого — снова:
sudo caddy reload
Теперь Caddy будет использовать ваш сертификат вместо Let's Encrypt.
Caddy — это мощный, но при этом понятный и удобный инструмент. Его главная сила — в простоте. За считанные минуты можно настроить веб-сервер с автоматическим HTTPS, без написания десятков строк конфигураций. А если понадобится больше контроля — есть API и JSON-конфигурации.
Мы рассмотрели базовые сценарии: размещение статических сайтов, работу с WordPress, подключение SSL. Но это только верхушка айсберга — Caddy поддерживает маршрутизацию, балансировку нагрузки, обработку WebSockets и многое другое.