MAATRIX / Блог / PHP-FPM + nginx на VPS

PHP-FPM + nginx на VPS

PHP-FPM + nginx на VPS: установка и настройка
Блог MAATRIX · 2026-07-07

nginx сам по себе PHP не выполняет — он передаёт запросы обработчику FPM. Соберём связку правильно: поставим нужную версию PHP, настроим пул воркеров и nginx, проверим через тестовый скрипт.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Как работает связка nginx + PHP-FPM

nginx отдаёт статику сам, а запросы к .php передаёт по протоколу FastCGI процессу php-fpm. FPM держит пул готовых воркеров, поэтому запросы обрабатываются без затрат на запуск интерпретатора каждый раз.

Связь между ними идёт через Unix-сокет (быстрее, локально) или TCP-порт (гибче, для распределённых схем). Для одного сервера выбирайте сокет.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS для PHP-сайта

Установка PHP-FPM

На Ubuntu свежие версии PHP берут из PPA ondrej, на Debian — из репозитория Sury. Пример для Ubuntu, PHP 8.3:

add-apt-repository -y ppa:ondrej/php
apt update
apt install -y php8.3-fpm php8.3-cli php8.3-mysql php8.3-curl php8.3-mbstring php8.3-xml php8.3-zip

Проверяем, что сервис запущен:

systemctl status php8.3-fpm
php -v

Настройка пула воркеров

Конфиг пула — /etc/php/8.3/fpm/pool.d/www.conf. Ключевые параметры: пользователь, сокет и стратегия управления процессами:

user = www-data
group = www-data
listen = /run/php/php8.3-fpm.sock
listen.owner = www-data
listen.group = www-data

pm = dynamic
pm.max_children = 20
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
pm.max_children ограничивает одновременные PHP-запросы. Ориентир: доступная память / средний размер воркера (обычно 30-60 МБ). Слишком большое значение приведёт к свопу.

Конфиг nginx

В server-блоке добавьте обработку PHP через сокет FPM:

server {
    listen 80;
    server_name example.com;
    root /var/www/example.com;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

Путь сокета в fastcgi_pass должен точно совпадать с listen из пула. Несовпадение — самая частая причина ошибки 502.

Применение и проверка

Перезапустите оба сервиса и проверьте синтаксис nginx:

nginx -t
systemctl reload nginx
systemctl restart php8.3-fpm

Создайте тестовый файл и откройте его в браузере (после проверки удалите — он раскрывает конфигурацию):

echo "<?php phpinfo();" > /var/www/example.com/info.php

Если видите 502 Bad Gateway — проверьте, что FPM жив и сокет на месте:

systemctl status php8.3-fpm
ls -l /run/php/
tail -f /var/log/nginx/error.log

На NVMe-дисках MAATRIX PHP-приложения (WordPress, Laravel) отдают страницы заметно быстрее — узким местом чаще становится не диск, а сам код.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS для PHP-сайта

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Частые вопросы

Сокет или TCP — что выбрать?

На одном сервере — Unix-сокет: меньше накладных расходов и он недоступен извне. TCP нужен, когда nginx и PHP на разных машинах.

Как поднять несколько версий PHP?

Установите php7.4-fpm и php8.3-fpm параллельно — у каждого свой сокет. В нужном server-блоке nginx укажите соответствующий fastcgi_pass.

Откуда постоянные ошибки 502?

Чаще всего: неверный путь сокета в fastcgi_pass, упавший FPM или превышенный pm.max_children. Смотрите error.log nginx и лог FPM.