
Как устроен WordPress на VPS: путь запроса и зоны ответственности
Разбираем роли Nginx, PHP-FPM, WordPress, MariaDB, файлов, cron и почты, чтобы понимать причину ошибки и не настраивать сервер вслепую.
Содержание
WordPress на VPS состоит из нескольких процессов и хранилищ. Посетитель видит одну страницу, но запрос проходит через сеть, Nginx, PHP-FPM, код WordPress и иногда MariaDB. Планировщик запускает фоновые задания, а письма уходят по отдельному каналу. Понимание этой цепочки позволяет искать причину ошибки в нужном месте.
Главный принцип: каждому компоненту нужна одна понятная роль и только необходимые права. Nginx не должен изменять весь код сайта, MariaDB не должна слушать публичный интернет, а почтовый пароль не должен находиться в доступном из браузера файле.
Что происходит после ввода адреса сайта
Сначала DNS возвращает IP-адрес VPS. Браузер устанавливает соединение и проверяет TLS-сертификат. Nginx принимает запрос и выбирает виртуальный хост по доменному имени.
Дальше возможны два пути:
- существующее изображение, таблица стилей или другой статический файл Nginx отдаёт с диска;
- запрос к PHP-странице Nginx передаёт в PHP-FPM по FastCGI.
FastCGI — протокол между веб-сервером и процессом, выполняющим PHP. На одном сервере для этого обычно используют Unix-сокет: специальный файл, доступный только локальным процессам. Он не является каталогом с данными сайта.
Зачем нужен PHP-FPM
PHP-FPM управляет пулом рабочих процессов PHP. Пул — группа процессов с общими настройками пользователя, памяти, журнала и способа приёма запросов. Один процесс получает запрос, загружает WordPress и плагины, обращается к базе, формирует HTML и возвращает его Nginx.
Число работников ограничивают, потому что каждый занимает память. Слишком маленький пул создаёт очередь, а слишком большой способен израсходовать RAM и вызвать OOM — принудительное завершение процессов ядром при нехватке памяти.
Состояние цепочки можно посмотреть командами только для чтения. Они показывают конфигурацию Nginx, службы PHP-FPM, локальные сокеты и слушающие сетевые порты:
sudo nginx -t
systemctl list-units --type=service --all | grep 'php.*-fpm'
sudo ss -lxnp | grep php
sudo ss -lntp
Успешный тест Nginx не означает, что PHP отвечает, поэтому сопоставьте путь fastcgi_pass в виртуальном хосте с фактическим сокетом из ss. В списке TCP-портов не должно быть публичного PHP-FPM: прямой доступ к FastCGI опасен и не нужен посетителю.
Что делает WordPress
WordPress — PHP-приложение. Его ядро определяет маршрут запроса, загружает активную тему и плагины, читает настройки и собирает ответ. Плагины исполняются внутри того же запроса, поэтому медленный или ошибочный плагин влияет на всю страницу.
Файл wp-config.php связывает приложение с базой: в нём находятся имя базы, пользователь, пароль и ключи. Сам файл не должен отдаваться посетителю и обычно не требует записи со стороны PHP.
Каталог wp-content содержит темы, плагины и загрузки. Из них постоянно изменяется прежде всего uploads; если разрешить PHP записывать во всё дерево сайта, уязвимость в плагине получает больше возможностей изменить исполняемый код.
Что хранится в MariaDB
В базе находятся публикации, пользователи, комментарии, параметры сайта и данные плагинов. PHP подключается к ней под отдельной учётной записью WordPress. На VPS с одним сайтом база обычно слушает loopback-адрес или локальный сокет, поэтому извне порт недоступен.
База и файлы образуют единое состояние. Если восстановить свежий uploads и старую базу, записи могут ссылаться на неизвестные вложения. Если вернуть только базу, изображения могут отсутствовать. Резервная копия должна учитывать обе части и момент их создания.
Проверить локальный адрес MariaDB и активные подключения можно без изменения данных:
sudo ss -lntp | grep -E '3306|mariadbd|mysqld'
sudo mariadb -e "SHOW VARIABLES LIKE 'bind_address';"
sudo mariadb -e "SHOW PROCESSLIST;"
Ожидайте loopback-адрес вроде 127.0.0.1, ::1 или работу через сокет. SHOW PROCESSLIST помогает увидеть зависшие и долгие запросы, но короткие подключения могут исчезнуть до просмотра. Публичный 0.0.0.0:3306 требует отдельного обоснования и сетевого ограничения.
Почему cron является отдельным слоем
По умолчанию WordPress проверяет запланированные события во время посещений. Такой механизм называют WP-Cron, хотя он не является системным cron. На малопосещаемом сайте задача может задержаться, а при всплеске запросов — запускаться слишком часто.
Системный cron или systemd timer вызывает обработчик по расписанию независимо от посещений. Одновременно оставлять оба механизма без контроля не следует. Фоновые задания могут публиковать записи, очищать кеш, отправлять письма и выполнять тяжёлые операции плагинов.
Почта не является частью веб-ответа
Успешная отправка формы в WordPress означает лишь, что приложение приняло запрос. Доставка зависит от SMTP-сервера, его учётных данных, DNS-записей SPF/DKIM/DMARC и решения принимающей стороны. Поэтому почту проверяют отдельным тестовым письмом и журналом провайдера, а не только зелёным уведомлением формы.
Как находить неисправность по границе
Код ответа помогает выбрать первый слой проверки:
- соединение не устанавливается — IP, маршрут, firewall и Nginx;
- ошибка TLS — сертификат, домен и время системы;
- Nginx отвечает 404 — виртуальный хост,
rootи правило маршрутизации; - ответ 502 — сокет, служба и журнал PHP-FPM;
- WordPress сообщает об ошибке соединения с базой — MariaDB, реквизиты и сокет;
- страница открывается медленно — PHP-пул, запросы базы, плагины и внешние вызовы.
Не включайте подробный вывод PHP-ошибок для посетителей. Сначала сопоставьте время запроса в access log Nginx с error log, журналом PHP-FPM и slow query log базы, если он был заранее настроен.
Какая схема подходит небольшому VPS
Для одного сайта разумная исходная архитектура такова: Nginx принимает только 80/443, PHP-FPM слушает локальный Unix-сокет, MariaDB доступна локально, код принадлежит администратору публикации, а запись PHP разрешена только в необходимых каталогах. Почта отправляется через отдельный SMTP-сервис, резервная копия уходит за пределы VPS.
Дальше маршрут разбирает эти слои по одному: установка PHP-FPM, подготовка MariaDB и установка WordPress. После этого настройки можно проверять как одну цепочку, а не как набор случайных команд.
Источники
Самопроверка
Проверьте, что материал усвоен
Ответьте на все вопросы. Результат сохранится только в этом браузере и будет учтён в статистике прочитанных материалов.
Разбираем коротко
Частые вопросы
WordPress сам является веб-сервером?
Нет. Обычно Nginx принимает HTTP-запрос, отдаёт готовые файлы или передаёт PHP-сценарий в PHP-FPM. WordPress выполняется внутри PHP и обращается к базе данных.
Где WordPress хранит статьи и изображения?
Текст, настройки и связи хранятся в базе, а оригиналы и производные изображения обычно лежат в wp-content/uploads. Для полного восстановления нужны обе части.
Почему сайт может открываться, а письма не приходить?
Отправка почты — отдельный внешний маршрут. Работа Nginx, PHP и базы не подтверждает правильность SMTP, DNS-записей домена или доставки получателю.


