Назад | Перейти на главную страницу

В чем разница обработчика PHP (CGI vs FastCGI vs Mod_PHP vs suPHP)?

Я понимаю, что существует четыре разных обработчика PHP (AFAIK).

Мне нужно знать плюсы и минусы этих обработчиков и для каких сред каждый подходит?

Например, если я использую общий хостинг-сервер, какой из вышеперечисленных обработчиков мне подходит? Или если я управляю частным сервером?

На самом деле это не «6 типов PHP», а два типа PHP, каждый из которых работает в трех разных реализациях Apache.

suphp, suphp_worker и suphp_event

suPHP сам по себе является оболочкой для PHP, запускающей PHP с заданными правами пользователя (например, отличными от прав, под которыми работает Apache) плюс модуль Apache (mod_suphp), который позволяет вам запускать suPHP - в основном в режиме CGI. Упрощенный режим CGI означает, что каждый запрос, передаваемый PHP, запускает новый процесс PHP (время выполнения). Это дорого с точки зрения использования ЦП и медленнее по сравнению с постоянной средой выполнения PHP (примерно в 3-5 раз, я полагаю).

Я предполагаю, что этот первый вариант использует Предварительный форк Apache MPM, который широко используется и тестируется, но довольно медленный по сравнению с другими MPM. Prefork делает то, что подразумевает его название: он разветвляет заданное количество процессов apache и сохраняет их доступными для входящих запросов.

Следующий (suphp_worker) использует рабочий МПМ вместо. Worker - это смесь предварительно созданных процессов и потоков, которая обычно работает быстрее, чем prefork (для доставки статического содержимого примерно дважды) и использует меньше памяти.

Последний (suphp_event), похоже, использует suPHP + Событие MPM, который снова использует другую модель процесса / потока, чем worker. Из тесты, которые я видел, event и worker имеют примерно одинаковую скорость - событие MPM (по крайней мере, с использованием Apache 2.2, что, вероятно, делает ваш провайдер) помечено как экспериментальное.

mod_php, mod_php_ruid2 и mod_php_itk

Это другой вид реализации обработчика PHP: Apache предварительно запускает среду выполнения PHP и передает ей входящие запросы, порождая при необходимости новые процессы. Это значительно быстрее, чем suPHP, но имеет обратную сторону отсутствия разделения прав пользователей: все процессы php выполняются с теми же правами, что и сам Apache.

Первый вариант, вероятно, использует MPM prefork (описанный выше), поскольку mod_php несовместим с моделями потоков из worker или event.

Второй вариант (mod_php_ruid2), похоже, использует модуль Apache mod_ruid2 Кроме того, это позволяет запускать каждый Apache VirtualHost с разными правами пользователя, включая процессы PHP. Имеет долгую список несовместимости который вам следует учитывать.

Последний вариант (mod_php_itk) использует сторонний ИТК МПМ для Apache - ответвление MPM-предшественника Apache с возможностью запуска каждого VirtualHost с заданными правами пользователя. Это также дает вам возможность установить дополнительные ограничения (например, количество клиентов) на VirtualHost.

Предложение

Если это ваш единственный выбор, и вы «одни» на своей машине (иначе: вы не планируете общий хостинг), я, вероятно, остановлюсь на старом добром mod_php.

Если вы планируете несколько веб-сайтов, вам нужно проверить свои приоритеты:

  • безопасность важнее производительности: используйте suphp_worker. Оба (рабочий MPM и suPHP) широко протестированы и являются хорошей отправной точкой для обеспечения безопасности. Производительность для статических файлов должна быть хорошей, PHP - не очень.
  • производительность важнее безопасности: возможно, mod_php_ruid2, но только потому, что у меня плохой опыт работы с ITK

Я предпочитаю использовать третий вариант, который использует FastCGI, что дает вам еще больше возможностей для разделения прав и доступа к привилегиям, но это, похоже, не предлагается.