С технической точки зрения NGINX Unit превосходил PHP-FPM: этот сервер приложений мог объединять HTTP, маршрутизацию, статические файлы и выполнение PHP. Тем не менее, для новых платформ хостинга PHP Unit не является универсальной альтернативой, поскольку проект находится в архиве с октября 2025 года и больше не поддерживается. NGINX с PHP-FPM Поэтому для новых систем целесообразнее выбрать более понятный стандарт. Unit в первую очередь актуален для документированных существующих установок, анализа рисков и запланированных миграций.
Статус «Архивировано» и четкое краткое заключение
По состоянию на 30 сентября 2026 года вывод однозначен: Модуль NGINX мог напрямую запускать приложения PHP, принимать HTTP-соединения, завершать TLS-соединения, выдавать статические файлы, а также маршрутизировать запросы. Таким образом, его функционал значительно превосходил возможности PHP-FPM. Тем не менее Unit не рекомендуется в качестве универсального решения для новых производственных платформ PHP-хостинга, поскольку официальный проект с октября 2025 года находится в архиве и больше не поддерживается.
Это не означает, что существующая установка Unit сразу станет неработоспособной. Она может и дальше обслуживать приложение, при условии, что её зависимости, меры безопасности и план миграции задокументированы. Однако новые инвестиции необходимо оценивать иначе: без постоянного сопровождения проекта возрастают риски, связанные с уязвимостями безопасности, доступностью пакетов, новыми версиями операционных систем и будущей совместимостью с PHP.
При указании версий важно четко проводить разграничение. В документации по установке, которая по-прежнему доступна, часто упоминается версия Unit 1.34.2, тогда как был выпущен стабильный релиз с тегом 1.35.0. Данный релиз, среди прочего, обеспечивает совместимость с PHP 8.5; однако это не означает продолжения его поддержки. Ветка разработки master ввиду статуса «архивировано» данная версия продукта не является определяющей для принятия операционных решений.
Различия между NGINX, PHP-FPM и Unit
Чтобы принять обоснованное решение, необходимо рассматривать эти компоненты по отдельности. NGINX является веб-сервером и обратным прокси: он принимает HTTP-запросы, может выдавать статический контент и перенаправляет динамические запросы. PHP-FPM, в свою очередь, представляет собой диспетчер процессов FastCGI. Он предоставляет PHP-рабочие процессы, но сам не выполняет типичные для веб-сервера задачи по приему и маршрутизации HTTP-запросов.
В классической архитектуре запрос сначала поступает в NGINX. Если это статический файл, NGINX может сразу же его предоставить. В случае скрипта PHP NGINX передаёт необходимые параметры FastCGI в пул PHP-FPM; свободный рабочий процесс выполняет код и возвращает ответ через NGINX. Размер пула и режим работы PHP-FPM настраиваются в конфигурационных файлах в формате php.ini.
Unit, напротив, был Сервер приложений с использованием слушателей, маршрутов, статической доставки и времени выполнения на языке в одной модели конфигурации JSON. PHP-приложение интегрируется туда как тип приложения; таким образом, Unit может отображать путь запроса в пределах одной платформы — от приема до выполнения PHP. Это не автоматически снижает операционный риск, но изменяет границы ответственности.
Поэтому Unit — это не „NGINX со встроенным PHP-FPM“. При сборке модуля PHP создается отдельный модуль SAPI, связанный с библиотекой PHP-Embed. Соответственно, при анализе и миграции команды должны не только перенести настройки FastCGI, но и заново сопоставить маршрутизацию, определения приложений, привязку модулей и пути диагностики. Ошибки нельзя безоговорочно приписывать вышестоящему веб-серверу или отдельному пулу FPM.
Модули PHP, версии и ограничения конфигурации
Для PHP установке Unit требуется, помимо ядра, соответствующий языковой модуль. Этот модуль привязан к используемой версии PHP и установке Unit. Если подходящих пакетов для данной операционной системы и версии PHP не было, в документации описывался способ самостоятельной сборки с использованием установки PHP, предоставляющей Embed-SAPI. Это значительно увеличивает трудозатраты на обновления, воспроизводимые сборки и анализ ошибок.
Конфигурация также реализуется по разным моделям. Unit объединяет прослушиватели, маршруты и приложения в виде данных JSON через свой интерфейс конфигурации. PHP-FPM, напротив, управляет пулами с помощью файлов в формате php.ini. Это различие выходит за рамки простого синтаксиса: в стеке FPM правила веб-сервера и определения пулов PHP находятся отдельно, тогда как Unit более тесно объединяет оба этих компонента в рамках одной платформы. Концепции миграции должны учитывать эту структуру.
Для директив PHP Unit различает следующие области: admin и пользователь. Параметры администратора соответствуют PHP_INI_SYSTEM и не могут быть изменены приложением во время выполнения; пользовательские параметры соответствуют PHP_INI_USER. Однако Unit не расширяет допустимый диапазон значений директивы PHP. Возможность установки параметра таким образом или его изменения с помощью кода приложения по-прежнему определяется режимом конфигурации PHP.
Предупреждение: Указанная в Unit 1.35.0 совместимость с PHP 8.5 подтверждает лишь поддержку этой версии в последнем стабильном релизе. Это не является гарантией будущих исправлений, связанных с безопасностью, или адаптаций модуля Unit для PHP. Поэтому для эксплуатации существующих систем следует документировать точную версию Unit, версию PHP, происхождение модуля и проверенный план перехода на новую версию в качестве взаимосвязанных зависимостей.
Настройка маршрутизации PHP и фронт-контроллера
Конфигурация модуля связывает прослушиватель с маршрутами и приложением. Для локальной демонстрации прослушиватель может быть настроен исключительно на 127.0.0.1:8080 прослушивать. Маршрут сначала пытается найти запрошенный файл в папке /srv/example-app/public доставлять в статическом режиме. Файлы PHP исключаются из этой доставки на основании исключения по MIME-типу и передаются приложению PHP; то же самое относится к несуществующим файлам. Таким образом, общедоступные файлы и выполнение приложения остаются отслеживаемыми как отдельные этапы.
В приложении задается root задаёт каталог с документами, в то время как type: php выбирает среду выполнения PHP. С помощью script: index.php каждый запрос, передаваемый приложению, направляется в этот скрипт. Это соответствует Передний контроллер многих PHP-фреймворков: приложение самостоятельно анализирует исходный путь и определяет, например, контроллер или страницу ошибки.
Без настройки script Обрабатывает пути к скриптам на основе URI. Это может подойти для старых приложений, в которых файлы PHP должны вызываться напрямую, однако требует тщательного ограничения доступных путей. targets Кроме того, они позволяют создавать подобласти с иным поведением параметров root, script или index. Таким образом, они не заменяют маршрутизацию, а представляют собой возможность целенаправленно определять несколько правил для приложений.
Приведённый ниже пример представляет собой файл конфигурации в формате JSON для локальной демонстрационной версии, а не для общедоступного сервиса. Он не содержит ни доменных имён, ни настроек TLS, ни учетных данных. Перед применением необходимо проверить права доступа к файлам, фактически установленную поддержку PHP и метод импорта конфигурации, предусмотренный для Unit.
Порядок имеет решающее значение: статическая доставка Этот шаг share выполняется перед переходом на резервный вариант, но явно исключает файлы PHP. Эти запросы и несуществующие файлы попадают в index.php; благодаря этому также работают «говорящие» URL-адреса, такие как /artikel/beispiel без файла с таким же именем. Необходимость в дополнительных правилах для каталогов загрузки, административных областей или непосредственно доступных PHP-файлов зависит от конкретного приложения и не следует делать общих выводов на основе данного демо-примера.
Сравнение моделей процессов и бюджета RAM
PHP-FPM управляет рабочими процессами в каждом пуле с помощью режимов static, dynamic и ondemand. В Unit, напротив, номер процесса моделируется внутри приложения. Динамическая конфигурация Unit ограничивается с помощью processes.max общее число и поддерживает processes.spare Процессы в режиме холостого хода; idle_timeout удаляет лишние неактивные процессы.
| механизм | PHP-FPM | Единица | Эксплуатационная эффективность | Граница |
|---|---|---|---|---|
| Фиксированное количество работников | pm = static | процессы с фиксированным числом | Вместимость определяется заранее. | Даже в режиме простоя система продолжает потреблять память. |
| Динамические рабочие процессы | pm = dynamic; верхний предел — pm.max_children | processes.max и processes.spare | Производственная мощность может определяться исходя из спроса. | Максимальное значение должно соответствовать объему доступной оперативной памяти. |
| Запуск по мере необходимости | pm = ondemand | Нет режима с таким же названием; поведение блока определяется настройками процесса | Может сократить количество процессов, работающих в режиме ожидания. | Необходимо отслеживать характеристики запуска и профиль нагрузки. |
| Уменьшение холостого хода | Параметры пула для выбранного режима FPM | idle_timeout | Ненужные процессы можно завершить. | Не заменяет планирование производственных мощностей. |
Поэтому эти термины не являются взаимозаменяемыми в полной мере. В частности, задокументированная настройка по умолчанию не является подходящим значением для веб-сайта. Как pm.max_children заодно и processes.max ограничивают параллельную работу PHP и при слишком низких значениях могут приводить к образованию очередей. С другой стороны, слишком высокие значения приводят к конкуренции за оперативную память с операционной системой, базой данных, кэшем и другими службами.
A Объем оперативной памяти пока что представляет собой лишь модель планирования: из общего объёма памяти вычитаются резервы для операционной системы, базы данных, кэша и других процессов. Оставшееся значение делится на консервативно оцененную потребность в памяти на одного PHP-рабочего процесса. Например, 1 200 MiB для PHP, поделенные на 120 MiB на одного рабочего процесса, дают в расчёте десять рабочих процессов; оба значения являются намеренно выбранными ориентирами, а не результатами измерений или рекомендациями по настройке.
В результате получается Верхний предел и это лишь отправная точка для наблюдения, а не правильная настройка. Решающее значение имеют реальные пиковые значения, очереди, ошибки ответов и потребность в памяти как при типичной, так и при высокой нагрузке. Для методического вывода и корректировки pm.max_children помогает внутренний пост Правильный расчет дочерних процессов PHP-FPM. В Unit действует тот же принцип, даже если параметры называются по-другому.
Предупреждение: установка пределов процессов путем простого перенятия чужих цифр зачастую лишь откладывает решение проблем. Только четко очерченный бюджет памяти и постоянный мониторинг позволяют определить, подходит ли верхний предел для рабочего процесса данному приложению, его расширениям и одновременно запущенным службам.
Оценка моделей предоставления услуг хостинга PHP
| Модель и архитектура | Выполнение PHP и процессы | Настройка и время выполнения | Состояние технического обслуживания | Подходящие условия эксплуатации | Основное ограничение |
|---|---|---|---|---|---|
| NGINX и PHP-FPM; разделение веб-уровня и уровня PHP | NGINX перенаправляет PHP через FastCGI в пулы FPM; FPM предоставляет режимы static, dynamic и ondemand. | Настройка веб-сервера и файлы пулов в формате php.ini; ориентировано на PHP. | PHP-FPM входит в состав дистрибутива PHP. | Стандарт для новых хостинговых сред PHP. | Необходимо обеспечить работу двух компонентов и их интерфейса. |
| NGINX Unit 1.35.0; сервер приложений с прослушивателями и приложениями | Unit запускает PHP через свой языковой модуль и управляет процессами приложения. | Централизованная конфигурация JSON; платформа для нескольких сред выполнения. | Последняя стабильная версия — 1.35.0; проект архивирован. | Существующая или специально изолированная особая среда. | Не требуется постоянное сопровождение проекта; следует учитывать привязку к модулям и версиям. |
| HTTP-сервер Apache с PHP-FPM; веб-сервер и внешний уровень PHP | Apache передает PHP в пулы FPM. | Конфигурация Apache и файлы пула FPM; ориентировано на PHP. | PHP-FPM входит в состав дистрибутива PHP. | Среды с требованиями, специфичными для Apache. | Необходимо обеспечить работу двух компонентов и их интерфейса. |
В таблице сравниваются архитектуры, а не скорость или объем памяти. Главным преимуществом новой PHP-хостинг-платформы на базе NGINX-PHP-FPM является четкое разделение функций: веб-сервер обрабатывает HTTP-запросы, проксирование и статический контент, а PHP-FPM управляет PHP-рабочими процессами в каждом пуле. Такое распределение обязанностей упрощает отдельную оценку конфигураций, сценариев ошибок и обновлений.
Unit смог объединить прослушиватели, маршрутизацию, статические файлы и приложения в одной платформе и обеспечить поддержку не только PHP, но и других сред выполнения. Именно этот многоязычный подход может объяснить, почему существующая среда выбрала Unit. Однако для проектов, основанных исключительно на PHP, это не является автоматическим преимуществом: он не заменяет ни оценку необходимых функций, ни проверку того, сможет ли команда в долгосрочной перспективе освоить иную логику настройки и эксплуатации.
В Unit 1.35.0 технический функционал должен быть определён Состояние технического обслуживания будут разделены. Дата выпуска фиксирует опубликованную версию и внесённые в неё изменения; из этого следует, что дальнейшее сопровождение проекта, который к этому моменту уже архивирован, не предусматривается. При принятии нового решения этот критерий имеет большее значение, чем небольшое количество видимых компонентов. Для существующей установки, напротив, это повод для документирования зависимостей и плана миграции.
Apache с PHP-FPM — это не универсально лучшая или худшая альтернатива, а один из вариантов при наличии определённых требований к Apache. Выбор должен основываться на удобстве обслуживания, доступных версиях PHP, процессах установки исправлений, знаниях команды и плане действий на случай сбоев. Без сопоставимых профилей нагрузки и задокументированной методологии измерения на основе этого обзора архитектуры невозможно составить достоверный рейтинг производительности.
Безопасная эксплуатация агрегата в парке оборудования
Существующую установку Unit следует сначала зарегистрировать как действующую систему, а не как шаблон для новой платформы. Решающее значение имеют фактически используемая версия, подключенные приложения и их зависимости. Тот факт, что Unit по-прежнему технически работоспособна, не меняет того, что проект был заархивирован; поэтому эксплуатация и замена должны планироваться одновременно.
В WordPress, Joomla или Drupal Передний контроллер Главное: пути, не соответствующие существующим файлам, должны направляться в центральный файл запуска PHP, тогда как существующие файлы можно выдавать напрямую. В руководстве WordPress по Unit описан этот принцип маршрутизации, включая обработку файлов PHP и /wp-admin/. Для существующей CMS это может быть понятной конфигурацией; в случае новой установки из этого не вытекает никаких рекомендаций для Unit.
С помощью Unit удалось объединить несколько небольших приложений, написанных на PHP, Python, Ruby или Node.js, в единую платформу с помощью прослушивателей, маршрутов и сред выполнения. Это может объяснить, почему в своё время при выборе архитектуры был сделан выбор в пользу Unit. Однако при хостинге, основанном исключительно на PHP, такая многоязычность не является самоцелью: отдельные, тщательно поддерживаемые компоненты могут в долгосрочной перспективе оказаться более удобными в обслуживании, несмотря на наличие дополнительных интерфейсов.
Замороженное развертывание контейнера требует особо тщательного инвентаризирования. Для этого задокументируйте точный тег Unit, версию PHP, установленный языковой модуль, базовый образ и полную конфигурацию. Кроме того, укажите источники образов и пакетов, процесс установки патчей, а также проверенные сценарии миграции и перехода на резервный вариант. Совместимость с PHP конкретного выпуска Unit не гарантирует, что соответствующий модуль будет получать исправления безопасности в будущем.
NGINX может располагаться перед Unit, например, если необходимо сохранить существующий уровень NGINX или целенаправленно перенаправить запросы на более ранний уровень. В документации Unit эта интеграция также упоминается в контексте защиты контрольного сокета. Однако она не устраняет проблему «архивированного» состояния и создает дополнительный сервис с собственной конфигурацией, ведением журналов и ответственностью за обновления. Поэтому необходимо тщательно сопоставить получаемую выгоду с этими эксплуатационными затратами.
Таймауты, журналы и зависшие процессы
Пределы процесса не являются диагностикой неисправностей. С помощью limits.requests Unit может заменить процесс приложения после обработки заданного количества запросов. Это позволяет ограничить по времени совокупное использование памяти, однако не устраняет ни утечек памяти, ни чрезмерно больших структур данных, ни блокирующих внешних вызовов. Поэтому регулярный перезапуск не должен рассматриваться как доказательство стабильности кода приложения.
С limits.timeout По истечении настроенного времени Unit завершает запрос с кодом HTTP 503. Это видимый защитный барьер для отдельных запросов, но не полная защита от зависших рабочих процессов: согласно документации, Unit не распознает зависшие процессы; они могут оставаться в пуле процессов. Увеличение таймаута лишь откладывает эту проблему, а его уменьшение может привести к прерыванию нормально выполняющихся медленных операций.
- Перед изменением пороговых значений необходимо зафиксировать HTTP-статусы, затронутые пути, временные интервалы и частоту.
- Объедините журналы доступа, ошибок и приложений по временным меткам; в случае использования PHP-FPM журнал медленных запросов (Slowlog) может предоставить дополнительную информацию о стеке вызовов.
- Проверить процессор, оперативную память, ввод-вывод, сетевые соединения, а также состояние и количество процессов.
- Затем проверьте код, запросы к базе данных, операции с файловой системой и внешние службы в качестве возможных причин.
- Только после выяснения причины и профиля нагрузки следует целенаправленно настраивать таймауты, ограничения процессов или правила перезапуска.
Таким образом, код ошибки HTTP 503 может указывать на истечение лимита времени, но также может быть вызван компонентами вышестоящего уровня или другими ошибками. Не следует решать проблему повторяющихся длительных запросов PHP исключительно за счёт увеличения количества рабочих процессов. Инструкция по Журнал Slowlog PHP-FPM и анализ причин замедления обработки запросов показывает, как следы стека можно связать с данными запроса; та же логика «причина-следствие» уместна и при анализе состояния модулей.
Особенно критичными являются симптомы без однозначного объяснения: растущее время ожидания, постоянно занятые процессы или отсутствие записей о ходе выполнения в журнале. В таких случаях состояние процесса и его зависимости важнее, чем простое увеличение времени таймаута. Например, проверьте, не ожидает ли PHP-рабочий процесс операции ввода-вывода с базой данных, DNS, файловой системой или сетью. Только конкретная причина блокировки определяет, что будет целесообразнее: исправление кода, настройка ресурсов или контролируемый перезапуск.
Выбор между новыми и старыми системами
Для новых сред хостинга PHP более логичным стандартным решением является налаженный веб-сервер с PHP-FPM. PHP-FPM входит в стандартный дистрибутив PHP и предоставляет документированные настройки пула и диспетчера процессов. В случае с Unit же вопрос смещается с чисто функциональной стороны на сторону удобства обслуживания: установка может продолжать работать, но архивированное состояние проекта повышает риск долгосрочной зависимости.
Для существующих систем Unit принятие обоснованного решения начинается с инвентаризации. Проверьте состояние технического обслуживания и возможность установки исправлений для операционной системы, PHP и базового образа, совместимость установленного языкового модуля, имеющиеся знания по эксплуатации, а также связанные службы. Не менее важны возможности экспорта конфигураций, воспроизводимый процесс отката и целевая система, на которую можно поэтапно перенести маршрутизацию, настройки PHP и развертывания.
Для миграции не требуется вымышленный универсальный срок, но необходим порядок приоритетов. В первую очередь следует уделить внимание приложениям, подключенным к Интернету, образам, которые невозможно обновить, модулям с неясным происхождением и критически важным для бизнеса приложениям без плана резервного перехода. Затем приложения можно сгруппировать по степени сложности и зависимостям. Параллельная эксплуатация во время контролируемого перехода может снизить риски, при условии что заранее определены хранение данных, сеансы и путь обратного перехода.
Die API управления представляет собой административный доступ, а не обычный конечный узел веб-сайта. Unit документирует для вас сокет домена Unix и обосновывает его использование соображениями безопасности. Установите строгие права доступа к файлам и чётко ограниченный административный доступ; общедоступность открыла бы злоумышленникам в случае успешного проникновения широкие возможности для изменения конфигурации.
Практический процесс миграции не заканчивается на настройке нового процесса. Переносите в целевую систему, приложение за приложением, версию PHP, расширения, значения переменных среды, права доступа к файлам, правила маршрутизации и возможности мониторинга. При этом сравнивайте ожидаемые ответы и случаи ошибок, а не делайте общие выводы о скорости работы. Таким образом, из незапланированного наследия получается документированная Стратегия выкупа с обоснованными техническими решениями.
Источники и современное состояние исследований
Состояние поиска:
Дата исследования: 30 сентября 2026 года. NGINX Unit находится в архиве с октября 2025 года. В по-прежнему доступной документации по установке частично упоминается версия 1.34.2; заявления о совместимости с PHP 8.5 относятся исключительно к стабильной версии 1.35.0.
https://github.com/nginx/unit/releases
https://unit.nginx.org/installation/
https://www.php.net/manual/en/install.fpm.configuration.php
https://unit.nginx.org/configuration/?platform=docker
https://unit.nginx.org/howto/source/
https://unit.nginx.org/
https://github.com/nginx/unit/blob/master/CHANGES
https://unit.nginx.org/howto/wordpress/
https://unit.nginx.org/howto/integration/
https://unit.nginx.org/controlapi/




