Что такое различие обработчика PHP (CGI по сравнению с FastCGI по сравнению с Mod_PHP по сравнению с suPHP)?

Возьмите этот тест Почтового сервера. Это скажет Вам возможные причины, Ваши электронные письма идут в Папку для спама и что можно сделать о том же.

5
задан 11 July 2015 в 10:27
1 ответ

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

suphp, suphp_worker и suphp_event

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

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

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

Последний (suphp_event), похоже, использует suPHP + Событие MPM , которое снова использует другую модель процесса / потока, чем рабочая. Из тестов, которые я видел , событие и рабочий процесс имеют примерно одинаковую скорость - событие 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) использует сторонний ITK MPM для Apache, ответвление MPM предварительной вилки Apache с возможность запускать каждый VirtualHost с заданными правами пользователя. Это также дает вам возможность установить дополнительные ограничения (например, количество клиентов) для каждого VirtualHost.

Предложение

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

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

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

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

5
ответ дан 3 December 2019 в 01:39

Теги

Похожие вопросы