Выберите продукт

Nginx Unit vs PHP-FPM vs RoadRunner в 2026: что выбрать для PHP на VDS

В 2026 году PHP на VDS можно запускать через PHP-FPM, Nginx Unit или RoadRunner. Разбираю без маркетинга, что лучше по задержке, памяти, совместимости, эксплуатации и где долгоживущие воркеры действительно окупаются на Laravel и API.
Nginx Unit vs PHP-FPM vs RoadRunner в 2026: что выбрать для PHP на VDS

Когда речь заходит о современном PHP на VDS, спор обычно выглядит так: оставить классический Nginx + PHP-FPM, перейти на Nginx Unit или попробовать RoadRunner ради меньшей задержки и долгоживущих воркеров. На практике это не вопрос «что быстрее в синтетике», а вопрос эксплуатационной модели.

Один и тот же проект может отлично жить на PHP-FPM, спорно чувствовать себя на Unit и очень быстро работать на RoadRunner, но только если команда понимает, как устроен жизненный цикл приложения. Для администратора это не теория: от выбранной модели зависят деплой, лимиты памяти, перезапуски, диагностика и сценарий отката.

В 2026 году выбор особенно важен, потому что сами PHP-приложения стали тяжелее. Laravel, Symfony, middleware, очереди, трейсинг, контейнер зависимостей, клиенты Redis и HTTP — всё это увеличивает цену каждого cold start. Поэтому модель «каждый запрос стартует заново» уже не всегда оптимальна.

Но и долгоживущие воркеры не бесплатны. Вместе с ускорением приходят риски утечек памяти, stale state, сложность graceful reload и более дорогая диагностика. Ниже разберём три подхода без фанатизма: где PHP-FPM по-прежнему лучший выбор, где Nginx Unit оправдан архитектурно, а где RoadRunner действительно приносит пользу.

Три модели выполнения PHP и почему это важно

Снаружи все три варианта могут обслуживать один и тот же HTTP-трафик. Разница — внутри, в жизненном цикле запроса и процесса.

PHP-FPM: проверенная классика

PHP-FPM — это менеджер пула worker-процессов, к которым веб-сервер передаёт FastCGI-запросы. Обычно это связка Nginx + PHP-FPM. Каждый запрос обрабатывается в относительно чистом окружении: код выполняется, состояние сбрасывается, воркер возвращается в пул.

Главный плюс такого подхода — предсказуемость. Почти все PHP-приложения, CMS, пакеты и привычки экосистемы изначально рассчитаны именно на него. Есть slowlog, status page, зрелые практики по настройке pm, понятная модель ограничения ресурсов и простой rollback.

Минус тоже очевиден: инициализация приложения стоит времени. Да, opcache снимает часть накладных расходов, но bootstrap фреймворка, контейнер зависимостей, конфигурация и часть пользовательского кода всё равно выполняются на каждый запрос. На маленьком сервере это может быть терпимо, а на API с высокой RPS — уже заметно.

Nginx Unit: сервер приложений с единой конфигурацией

Nginx Unit — это отдельный application server, который сам принимает HTTP и умеет запускать приложения на разных языках, включая PHP. Для PHP это означает, что внешний Nginx не всегда обязателен, хотя в продакшене его нередко ставят перед Unit ради TLS, отдачи статики, лимитов и привычной edge-конфигурации.

Сильная сторона Unit — централизованная модель управления приложениями через API конфигурации. Можно описывать listeners, routes, applications и процессы в одном месте и применять изменения без классического reload всего стека. Для self-hosted платформы это бывает удобно: меньше разрозненных компонентов и меньше glue-логики.

Но Unit так и не стал стандартом де-факто для PHP. Причина не в том, что он плохой, а в том, что он занимает промежуточное положение: интереснее голого FPM по модели управления, но обычно не даёт такого выигрыша по execution model, как RoadRunner.

RoadRunner: долгоживущие воркеры

RoadRunner держит пул долгоживущих PHP worker-процессов. Приложение инициализируется один раз, после чего воркер обслуживает много запросов подряд. Именно это убирает значительную часть overhead, связанного с повторным bootstrap.

Отсюда и главный плюс: лучше latency на горячем приложении, выше throughput на CPU-ограниченных сценариях и меньше повторной работы на каждом запросе. Особенно хорошо это видно на JSON API, тяжёлых Laravel-проектах и сервисах, где критичен tail latency.

Но вместе с ускорением приходит новая дисциплина разработки. Всё, что раньше безопасно исчезало после завершения запроса, теперь может остаться в памяти воркера. Статические свойства, singleton-состояние, кэш в пользовательском коде, неочищенные ссылки и побочные эффекты начинают влиять на следующие запросы.

Что изменилось к 2026 году

Если несколько лет назад long-running PHP воспринимался как нишевая оптимизация для энтузиастов, то к 2026 году подход стал заметно спокойнее и прагматичнее. Многие команды уже попробовали его на staging и поняли две вещи: прирост действительно бывает ощутимым, но он не бесплатный.

Одновременно PHP-FPM никуда не делся и точно не «устарел». Для огромного числа продакшен-проектов это до сих пор лучший baseline: зрелый стек, понятный rollback, простая совместимость с любыми пакетами и удобная диагностика на малых и средних серверах.

Nginx Unit остаётся выбором для тех, кому нравится идея application server с централизованной конфигурацией и более целостной платформенной моделью. Но массового вытеснения PHP-FPM не произошло, и это важно: у FPM всё ещё шире экосистема, больше готовых рецептов и выше предсказуемость эксплуатации.

Короткий вывод заранее: по умолчанию выбирайте PHP-FPM, для Laravel и API с хорошей инженерной дисциплиной смотрите в сторону RoadRunner, а Nginx Unit рассматривайте как осознанный инфраструктурный выбор, а не как универсальный апгрейд производительности.

FastFox VDS
Облачный VDS-сервер в России
Аренда виртуальных серверов с моментальным развертыванием инфраструктуры от 195₽ / мес

Сравнение по ключевым критериям

Производительность и задержка

В прямом сравнении RoadRunner чаще выигрывает по средней и особенно по хвостовой задержке на прогретом приложении. Причина проста: меньше повторного bootstrap. Для API, где на каждый запрос приходится немного I/O и довольно много framework overhead, это даёт заметный эффект.

PHP-FPM может показывать очень достойный результат, если грамотно настроены pm, opcache и сам bootstrap приложения. Но при одинаковом коде FPM обычно проигрывает там, где цена старта запроса значительна.

Unit в вопросе raw performance редко становится безоговорочным лидером. Он может быть конкурентным, но чаще его выбирают не за рекордные бенчмарки, а за operational model и удобство платформенного управления.

Потребление памяти

С памятью всё менее очевидно, чем кажется. Долгоживущие воркеры действительно экономят часть CPU на повторных стартах, но memory footprint у RoadRunner может как улучшиться, так и ухудшиться. Если приложение аккуратное, без удержания лишних объектов, результат хороший. Если нет — воркеры постепенно распухают.

У PHP-FPM память предсказуемее. Модель с pm.max_requests и полным завершением процесса давно отработана. Поэтому на небольшом сервере FPM часто комфортнее: проще посчитать верхнюю границу RAM и меньше сюрпризов после релиза.

Unit обычно тоже ведёт себя стабильно, но профиль памяти зависит от числа процессов и реальной тяжести приложения. Магии здесь нет: если код тяжёлый, память всё равно понадобится.

Совместимость с приложениями и библиотеками

По совместимости победитель почти всегда PHP-FPM. Он максимально близок к тому, как проект «ожидает» работать. Большинство CMS, самописных приложений и типовых PHP-сервисов просто запускаются и живут без дополнительных оговорок.

RoadRunner требует проверки на безопасность long-running модели. Нужно ревизовать жизненный цикл сервисов, статическое состояние, обработку исключений, request-scoped зависимости, кэш в памяти и повторное использование соединений. Для Laravel это уже нормальная практика, но «поддерживается» не означает «можно включить и забыть».

Unit с точки зрения обычного PHP-приложения довольно дружелюбен, но у него меньше накопленного operational-опыта в сообществе. Если у вас нестандартный edge case, шанс быстро найти проверенный рецепт ниже, чем для FPM.

Схема различий между PHP-FPM, Nginx Unit и RoadRunner

Простота эксплуатации на VDS

Для администратора PHP-FPM — самый понятный и дешёвый по cognitive load вариант. Всё прозрачно: Nginx проксирует в Unix socket, есть отдельные пулы, лимиты, reload, логирование, systemd-unit и привычная диагностика через ss, journalctl, top и strace.

RoadRunner добавляет новый слой рантайма. Нужно следить за worker pool, health checks, лимитами по памяти, graceful shutdown и корректным деплоем без потери запросов. Это не запредельно сложно, но уже требует инженерной зрелости и наблюдаемости.

Unit удобно администрировать там, где команде нравится API-driven управление и декларативная конфигурация. Но по числу специалистов, которые умеют дебажить его «на автомате», он пока уступает PHP-FPM.

Когда выбирать PHP-FPM

Несмотря на популярность application server-подходов, PHP-FPM остаётся правильным ответом в большинстве типовых случаев.

  • У вас обычный сайт, CRM, интернет-магазин, CMS или корпоративное приложение без экстремальной нагрузки.
  • Важнее надёжность и простой rollback, чем максимальная производительность на одно ядро.
  • Команда не хочет инвестировать время в аудит long-running поведения кода.
  • Сервер небольшой, а память и операционная простота важнее модных архитектур.
  • Нужна максимальная совместимость с расширениями, пакетами и привычными практиками поддержки.

Важно подчеркнуть: грамотно настроенный FPM — это не компромисс, а зрелое продакшен-решение. Очень часто проблему производительности решают не сменой рантайма, а устранением медленных SQL, нормальным кэшем, настройкой opcache и уменьшением лишней работы в bootstrap.

Когда выбирать RoadRunner

RoadRunner имеет смысл там, где вам действительно нужен выигрыш от долгоживущих воркеров, а команда готова поддерживать такую модель.

  • Высоконагруженные JSON API и backend-for-frontend сервисы.
  • Laravel-проекты с тяжёлым bootstrap, где важен low latency.
  • Сервисы с большим количеством однотипных коротких запросов.
  • Проекты, где уже есть культура нагрузочного тестирования и memory profiling.
  • Команды, которые готовы следить за lifecycle приложения, а не только за Nginx и php.ini.

Для Laravel выбор в пользу RoadRunner особенно логичен, когда приложение уже упирается в CPU из-за постоянной инициализации фреймворка. Но перед миграцией полезно честно ответить на вопрос: вы уверены, что bottleneck именно в модели исполнения, а не в базе данных, Redis, файловой системе или внешних API?

Если у вас в стеке есть фоновые обработчики и очереди, сначала полезно навести порядок в процессах и перезапусках — на практике помогает подход из статьи про настройку очередей, Supervisor и systemd для воркеров. Без этого long-running модель часто начинает болеть не в вебе, а в обслуживающих процессах.

Виртуальный хостинг FastFox
Виртуальный хостинг для сайтов
Универсальное решение для создания и размещения сайтов любой сложности в Интернете от 95₽ / мес

Когда выбирать Nginx Unit

Сценарий выбора Unit уже, но вполне реальный.

  • Вам нужен application server с конфигурацией, управляемой через API.
  • Хочется уменьшить количество разрозненных компонентов в self-hosted стеке.
  • Есть несколько приложений или сервисов, которыми удобно управлять централизованно.
  • Команду устраивает менее массовый, но архитектурно аккуратный инструмент.

Если вы рассматриваете Unit как «замену FPM, которая точно даст ускорение», ожидания лучше снизить. Если рассматриваете его как платформенное решение с другой моделью конфигурации и процессов — это уже честная постановка задачи.

Практика для VDS: что реально важно кроме выбора сервера приложений

В запросах о сравнении PHP application server слишком много внимания обычно уделяют только рантайму. Но на сервере итоговое поведение почти всегда определяется совокупностью факторов, а не одной модной технологией.

CPU и планировщик

RoadRunner лучше раскрывается, когда CPU не забит соседними задачами и у вас достаточно ядер или хотя бы предсказуемая квота. Если сервер совсем маленький, а утилизация упирается в одно-два ядра, эффект может оказаться скромнее ожиданий.

Память и лимиты

Для FPM важно считать число воркеров по реальному RSS, а не по чужой таблице. Для RoadRunner — контролировать memory growth и лимиты рестарта. Для Unit — помнить, что уменьшение числа компонентов не отменяет цену самого приложения.

OPcache

opcache нужен во всех трёх сценариях. С ним FPM становится заметно быстрее, Unit тоже выигрывает, а в RoadRunner он остаётся актуальным, потому что код всё равно исполняется интерпретатором PHP. Но сам по себе OPcache не превращает request-per-request модель в long-running.

Релизы и graceful restart

На FPM схема деплоя обычно проще: выкладка, reload, прогрев, переключение symlink при необходимости. С RoadRunner важно отдельно проверить graceful draining воркеров и поведение во время rolling restart. Если планируете такие обновления на бою, заранее прогоните сценарий без простоя по шагам, как в материале про миграцию сайта без даунтайма.

Наблюдаемость

Если вы не видите p95, p99, memory drift, число активных воркеров, частоту рестартов и ошибки приложения, то выбирать по бенчмаркам бессмысленно. Особенно это касается RoadRunner: без метрик long-running стек быстро превращается в гадание.

Метрики задержки, памяти и воркеров при эксплуатации PHP-стека

Минимальные ориентиры по конфигурации

Ниже не готовые production-рецепты, а скорее sane baseline, от которого удобно стартовать и дальше проверять цифрами.

PHP-FPM: что проверить первым

pm = dynamic
pm.max_children = 20
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
pm.max_requests = 1000
request_terminate_timeout = 60s

Дальше эти значения нужно сверять не с блогом, а с реальным RSS воркера, профилем нагрузки и временем ответа. Для небольшого сервера ошибка в pm.max_children болезненнее, чем выбор между Unit и FPM.

OPcache: базовый baseline

opcache.enable=1
opcache.enable_cli=0
opcache.memory_consumption=256
opcache.interned_strings_buffer=32
opcache.max_accelerated_files=50000
opcache.validate_timestamps=1
opcache.revalidate_freq=2

Если релизы атомарные и процесс деплоя контролируемый, параметры можно ужесточать, но только понимая последствия. Неудачная настройка инвалидирования кэша иногда ломает прод не хуже, чем нехватка CPU.

RoadRunner: что важно концептуально

workers.pool.num_workers = 8
workers.pool.max_jobs = 1000
workers.pool.supervisor.max_worker_memory = 256
http.pool.num_workers = 8

Ключевая идея — ограничивать срок жизни воркера не только по ошибкам, но и по числу запросов и памяти. Это помогает бороться с накоплением состояния и утечками. Значения подбираются только нагрузочным тестом.

Частые ошибки при миграции

  • Считать, что RoadRunner автоматически ускорит любой PHP-проект без изменений в коде.
  • Сравнивать FPM и RoadRunner без одинакового прогрева OPcache и без реалистичной базы данных.
  • Игнорировать memory leak и state leak в long-running воркерах.
  • Выбирать Unit только потому, что в названии есть Nginx, ожидая идентичного operational experience.
  • Оценивать стек по среднему времени ответа, не глядя на p95 и p99.
  • Мигрировать в прод без сценария отката на классический PHP-FPM.

Итоговый выбор без религиозных войн

Если нужен короткий практический вывод для продакшена на сервере, он выглядит так: PHP-FPM — лучший default. Это самый сбалансированный вариант для большинства сайтов и приложений: совместимый, предсказуемый, хорошо документированный и дешёвый в сопровождении.

RoadRunner — выбор для тех, кто действительно понимает, зачем ему долгоживущие воркеры. На API и Laravel-проектах он может дать отличный результат, но только при взрослой дисциплине разработки и эксплуатации.

Nginx Unit — не экзотика и не «убийца FPM», а отдельный тип инструмента. Он хорош там, где важна его модель управления приложениями и конфигурацией. Но как универсальный ответ на вопрос «что лучше для PHP» подходит не всегда.

Поэтому для self-hosted PHP на VDS я бы советовал идти от простого к сложному: сначала выжать максимум из PHP-FPM и OPcache, затем подтвердить профилированием, что bottleneck именно в request lifecycle, и только после этого тестировать RoadRunner. Unit стоит брать тогда, когда вам действительно нужна его платформа, а не просто надежда на магическое ускорение.

И да, в 2026 году зрелость решения всё ещё важнее модности. Самый быстрый стек на бумаге легко проигрывает чуть менее быстрым, но понятным и наблюдаемым системам в реальной эксплуатации.

Поделиться статьей

Вам будет интересно

Miniflux vs FreshRSS vs Tiny Tiny RSS в 2026: какой self-hosted RSS reader выбрать для VDS OpenAI Статья написана AI (GPT 5)

Miniflux vs FreshRSS vs Tiny Tiny RSS в 2026: какой self-hosted RSS reader выбрать для VDS

Self-hosted RSS reader на своём сервере — это контроль над источниками, приватность и независимость от внешних платформ. Разбираем ...
etcd vs Consul vs ZooKeeper в 2026: service discovery, distributed locks и выбор coordination store OpenAI Статья написана AI (GPT 5)

etcd vs Consul vs ZooKeeper в 2026: service discovery, distributed locks и выбор coordination store

Когда нужен не просто KV store, а надежный coordination layer, выбор между etcd, Consul и ZooKeeper быстро становится архитектурны ...
Nginx QUIC/HTTP/3 в 2026: mainline vs OpenResty vs Caddy для production OpenAI Статья написана AI (GPT 5)

Nginx QUIC/HTTP/3 в 2026: mainline vs OpenResty vs Caddy для production

HTTP/3 уже вошёл в production, но выбирать сервер всё равно приходится по эксплуатационным критериям: QUIC по UDP, Alt-Svc, TLS 1. ...