
Обзор архитектуры: как работает связка Caddy, PHP и MySQL
Связка Caddy + PHP + MySQL состоит из трех компонентов: веб-сервера, интерпретатора серверного языка, и базы данных, каждый из которых выполняет свою роль.
- Caddy отвечает за прием запросов HTTP/HTTPS и выдачу ответов, управление SSL-сертификатами и динамическими запросами на PHP. Главной особенностью Caddy является встроенная поддержка HTTPS и автоматическая интеграция с Let’s Encrypt.
- PHP-FPM — это менеджер процессов PHP, который выполняют скрипты и возвращает результат Caddy.
- MySQL — это база данных, которая хранит пользовательские данные и обеспечивает взаимодействие с приложением.
По сравнению с Nginx, Caddy использует HTTP/2 (и в некоторых случаях HTTP/3) и самостоятельно общается с серверами Let’s Encrypt без использования Certbot.
Установка и первичная настройка веб-сервера Caddy
Для того чтобы установить Caddy на Debian или Ubuntu, выполните команду через пакетный менеджер:
apt install caddy
После установки сервер уже готов к работе.
Конфигурация выполняется через файл:
/etc/caddy/Caddyfile
Пример конфигурации выглядит так:
site.example {
root * /var/www/site.example
file_server
}
Caddy, в свою очередь, автоматически настроит HTTPS, получит SSL-сертификат и перенаправит HTTP в HTTPS.
Интеграция PHP
Для установки менеджера PHP-FPM выполните:
apt install php-fpm
После установки, менеджер необходимо настроить. Это касается таких параметров как php.ini, пример конфигурации которого выглядит следующим образом:
cgi.fix_pathinfo=0 post_max_size = 32M upload_max_filesize = 30M
Затем через Caddyfile подключите PHP к Caddy
php_fastcgi unix//run/php/php-fpm.sock
Перезапустите сервер:
systemctl reload caddy
Опционально: проверьте работу PHP, создав файл info.php с функцией phpinfo().
Читайте также: NVMe-накопители для серверов: Что это такое и как выбрать лучший вариант?
Развёртывание и защита базы данных MySQL
Установите MySQL (или MariaDB):
apt install mysql-server
После установки запускается скрипт базовой защиты, который отключает анонимных пользователей, закрывает удаленный доступ, и выполняет базовые настройки безопасности.
Дальше создаются пользователи, и им выдаются права:
CREATE USER ‘user’@’localhost’ IDENTIFIED BY ‘password’;
GRANT ALL PRIVILEGES ON user_%. TO ‘user’@’localhost’;
FLUSH PRIVILEGES;
Это позволит управлять доступом к базе данных.

Автоматическая выдача и продление SSL-сертификатов через Let’s Encrypt
Главная “фишка” Caddy — автоматическая работа с SSL.
Для автоматической выдачи или продления SSL-сертификатов, необходимо указать только домен:
site.example { … }
С этой информацией, сервер сам проверит доступность домена, получит сертификат от Let’s Encrypt или автоматически продлит его, и настроит HTTPS.
Конфигурация Caddyfile: практические примеры и лучшие практики
Вот так выглядит пример полной конфигурации Caddyfile:
site.example { root * /var/www/site.example file_server encode zstd gzip
php_fastcgi unix//run/php/php-fpm.sock
log {
output file /var/log/caddy/site.log
format console
}
}
Для лучшей безопасности и производительности можете включить HSTS:
header { Strict-Transport-Security max-age=31536000; }
Часто спрашивают: Передача файлов с локального ПК на VPS под Linux
Настройка домена и DNS для корректной работы HTTPS
Первый шаг — это настройка домена и DNS.
Имея IP адрес своего сервера, нужно открыть DNS и создать А-запись, которая выглядит примерно так:
- Host: @
- Type: A
- Value: IP сервера
После создания А записи нужно немного подождать для обновления DNS. Когда ты укажешь домен в Caddyfile и перезапустишь Caddy, он попытается получить сертификат от Let’s Encrypt; при правильной настройке (доступный сервер, нужный IP, открытые порты 80 и 443) сертификат выдается автоматически. Важно понимать, что Caddy использует проверку домена (HTTP-01 challenge), поэтому сервер должен быть доступен из интернета.
Для корректной работы HTTPS также необходимо:
- Зарегистрировать домен.
- Указать А-запись.
- Открыть порты 80 и 443.

Проверка работоспособности и устранение типичных ошибок
После настройки нужно проверить:
- Открывается ли сайт по HTTPS.
- Выдан ли сертификат.
- Работает ли PHP.
- Подключается ли база данных.
Частые ошибки:
- Закрытые порты 80 и 443.
- Некорректная настройка DNS.
- Ошибка форматирования Caddyfile (например, отступы).
- Неправильный путь к сокету PHP-FPM.
Читайте также: Выделенный IP-адрес: нужен ли он вашему сайту и какие преимущества дает
Кеширование, сжатие и HTTP/2
Caddy сразу поддерживает HTTP/2 и HTTP/3, TLS 1.3 и автоматическое сжатие. Чтобы включить сжатие, выполните команду:
encode zstd gzip
Сервер тогда автоматические выберет лучший алгоритм сжатия в зависимости от клиента.