1. Home
  2. Техническое
  3. Apache
  4. ZFPM (Zone FastCGI Process Manager)
  1. Home
  2. Техническое
  3. ZFPM (Zone FastCGI Process Manager)

ZFPM (Zone FastCGI Process Manager)

Обзор

ZFPM (Zone FastCGI Process Manager) – это программный продукт, разработанный компанией Zone Media, целью которого является предоставление автоматизированного, масштабируемого и безопасного способа запуска приложений на основе FastCGI в виртуальных серверных средах.

ZFPM – это в первую очередь менеджер процессов для PHP-приложений, но он также может работать с другими FastCGI-приложениями (например, Ruby On Rails, Django).

Поскольку безопасность является нашим главным приоритетом в общей среде, нецелесообразно запускать приложения с привилегиями веб-сервера, как в случае с mod_php (DSO). PHP в режиме FastCGI позволяет каждому виртуальному серверу запускать свои приложения с привилегиями пользователя.

Система на основе ZFPM состоит из двух основных компонентов:

  • ZFPM – Менеджер процессов FastCGI
  • mod_zfpm – Модуль Apache2 для запросов FastCGI – оптимизирован специально для ZFPM

Задача mod_zfpm – отправить входящий HTTP-запрос на ZFPM, который при необходимости запустит и перешлет его нужному приложению PHP-FCGI. PHP-FCGI генерирует ответ (веб-страницу) и отправляет его обратно ZFPM, который, в свою очередь, отправляет его mod_zfpm и, наконец, клиенту, инициировавшему запрос. Передача данных между всеми тремя компонентами (mod_zfpm <-> ZFPM <-> PHP-FCGI) осуществляется с помощью протокола FastCGI.

В качестве альтернативы ZFPM можно использовать модули Apache mod_fcgid и mod_fastcgi, менеджеры процессов которых жестко интегрированы в процесс веб-сервера Apache. Отсюда вытекает важное отличие от ZFPM, который управляет всеми процессами FCGI совершенно отдельно от веб-сервера Apache. Это означает, что начальная загрузка программного обеспечения веб-сервера не прерывает и не оказывает прямого влияния на работающие PHP-скрипты. Скрипты могут беспрепятственно завершать свою работу, независимо от того, что, например, конфигурация веб-сервера изменилась в процессе работы и программное обеспечение было инициализировано. Кроме того, не все процессы PHP-FCGI останавливаются/запускаются во время начальной загрузки веб-сервера.

Количество процессов PHP-FCGI на сервере под нагрузкой может исчисляться тысячами, и было бы крайне нерационально и неудобно загружать такое большое количество процессов, просто внеся небольшое изменение в конфигурацию веб-сервера.

Поскольку ZFPM является универсальным инструментом для всего, что говорит на языке FastCGI, нет никаких проблем с одновременным запуском на виртуальных серверах приложений, основанных на разных версиях PHP. В качестве альтернативы ZFPM можно упомянуть еще одну – PHP-FPM, которая представляет собой систему FastCGI, ориентированную только на PHP. Однако ее главным недостатком является сложность безопасного управления процессами PHP-FCGI, особенно в общей среде, где на одном физическом сервере могут быть тысячи различных виртуальных серверов, которые должны иметь возможность запускать различные версии PHP по желанию.

Описания наиболее распространенных ошибок

Хотя FastCGI является одним из самых быстрых и безопасных способов запуска PHP в общей среде, он (в отличие от простого mod_php) представляет собой довольно сложную цепочку обработки запросов, где сбои в различных компонентах могут привести к появлению различных, порой загадочных сообщений в журнале ошибок Apache.

Ниже приведены некоторые из наиболее распространенных сообщений об ошибках ZFPM и некоторые подсказки о том, как начать искать причину ошибки.

Connection to FastCGI was reset by peer during reading response. Check your FastCGI application log. Increase LogLevel verbosity to 'info' for additional protocol info.

Первым делом проверьте лог-файл вашего приложения, так как, скорее всего, оно неожиданно прекратило работу и закрыло FastCGI-соединение. Клиент получит сообщение об ошибке HTTP 500. Если вы не можете определить причину самостоятельно, обратитесь в службу технической поддержки и узнайте, как воспроизвести ошибку.


stderr: Timeout (30s) exceeded while waiting for FCGI process to become available

Ограничение процессов PHP-FCGI, выполняющих параллельные запросы на этом виртуальном хосте, достигнут, и запрос безрезультатно ожидает освобождения какого-либо процесса в течение не менее 30 секунд. Клиент получает сообщение об ошибке HTTP 500. Скорее всего, речь идет о сайте, испытывающем значительную нагрузку, поэтому, если проблема возникает часто, рекомендуется обратиться за ее решением в службу технической поддержки.


stderr: Timeout (900s) exceeded while reading from socket (application)

Приложение обрабатывает запрос не менее 15 минут, не отправляя ответа. Скрипт должен время от времени что-то выдавать, иначе менеджер процессов решит, что скрипт где-то “застрял”, и принудительно прервет его. Также стоит отметить, что максимальное время обработки веб-запроса составляет 86400 секунд, и если оно будет достигнуто, скрипт будет прерван независимо от того, выводит он что-нибудь или нет. Если HTTP-заголовки уже были отправлены, ответ будет прерван на полпути. Если они не отправлены, клиент получит сообщение об ошибке HTTP 500.


stderr: Timeout (150s) exceeded while reading from socket (server)

HTTP-клиент отправляет запрос слишком медленно. В данном примере он не смог отправить ни одного нового байта за 150 секунд. Менеджер процессов прерывает ожидание, и клиент получает сообщение об ошибке HTTP 500.


stderr: <Error reported by PHP script>

Сообщения об ошибках скриптов, которые не перехватываются самим скриптом, передаются PHP-FCGI на веб-сервер. Такие сообщения об ошибках отображаются непосредственно в логе ошибок.

Updated on 23. Apr 2024

Was this article helpful?

Related Articles