Различия и недостатки между: Fast-CGI, CGI, Mod-PHP, SuPHP, PHP-FPM

73

Есть несколько разных php "обёрток" (?). В чем различия между ними? Пытался гуглить, но не могу найти информацию. (мод-php не доступен для Google).

Почему я могу выбрать один над другим?

Gacek
источник

Ответы:

141

Вопросы немного странные, не ясно, спрашиваете ли вы только о PHP или ваш вопрос носит более общий характер.

Я дам вам краткий обзор со стороны PHP.

Во-первых, два протокола:

  • CGI-скрипты - это способ запуска серверного скрипта при получении HTTP-запроса; это не имеет ничего общего с PHP

  • FastCGI - это «лучший CGI» - известно, что CGI медленный, Fast CGI - это другой подход с гораздо более быстрыми результатами; это также не имеет ничего общего с PHP.

Теперь PHP связан с вещами:

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

  • PHP-FPM - это PHP-реализация FastCGI; PHP-FPM работает как самостоятельный сервер FastCGI, и Apache подключается к серверу с помощью модуля Apache, обычно mod_fcgid или mod_fastcgi; Лично я считаю, что это намного лучше, чем запускать как mod_php, но это зависит от ваших требований и также немного сложнее; в этой конфигурации права доступа обрабатывают связанные вещи и все выполняется в конфигурации PHP, пользователя PHP и т. д. Apache подключается к PHP как к серверу; в этой конфигурации также возможно иметь пул PHP-серверов и иметь PHP-сервер на физически отличной машине от Apache. Они говорят, что это почти так же быстро, как использование модуля Apache, и есть преимущества лучшего контроля над конфигурацией PHP.

  • SuPHP - это в основном использовалось для решения некоторых проблем mod_php, связанных с разрешениями; с помощью mod_php PHP-скрипты запускаются под пользователем / группой Apache; mod_suphp может запускать скрипты от другого пользователя; Я никогда не использовал его, PHP-FPM теперь должен быть намного лучшим выбором

Итак, в основном:

  • CGI, Fast-CGI являются протоколами; CGI медленный, Fast-CGI намного быстрее
  • mod_php (с подчеркиванием) и PHP-FPM - это два основных способа запуска PHP
  • mod_SuPHP похож на mod_php, но может изменить пользователя / группу, под которой запускается процесс
Алеш Крайник
источник
Может быть, я уточню, что вдохновило меня на этот вопрос. Я только что получил VPS с панелью ISPConfig (панель Opensource для страниц администратора). Там я могу выбрать версию PHP для сервера / стороны. И те перечислены там. Так что в принципе кажется, что выбор PHP-FPM выбирает FastCGI с дополнительными «обертками»?
Гасек
12
Я не знаю, что на самом деле использует панель ISPConfig, но PHP, запускаемый как PHP-FPM, означает, что PHP запустит собственный встроенный сервер FastCGI и будет прослушивать запросы по протоколу FastCGI. HTTP-сервер будет получать запросы из Интернета, обрабатывая их, как обычно, и в случае необходимости запуска страницы с использованием PHP запрос будет передан по протоколу FastCGI в PHP, а результат будет отправлен обратно в браузер. Думайте об этом как о HTTP-сервере, стоящем между браузером и сервером PHP (PHP-FPM FastCGI). PHP-FPM - это реализация протокола FastCGI.
Алеш Крайник
@ AlešKrajník спасибо за это сложное объяснение. Ну, я пытался запустить php как отдельный пользователь / группу. Поэтому я начал с Su-exec и зашел в тупик, а затем несколько человек порекомендовали php-fpm, который вы объяснили. Тем не менее, я все еще запутался по поводу модулей mog_cgi, mod_cgid, mod_fastcgi, mod_fcgi и как они работают с php-fpm. Также я прочитал в другом уроке, что они использовали mod_fcgid и mod_proxy_fcgi. Как трудно понять, как все части собираются вместе.
Дэвид Окви
1
@landed бинарный PHP-FPM является частью каждого дистрибутива PHP начиная с 5.3.3 или 5.4.0 (проверьте это: php-fpm.org ), для этой конкретной версии PHP.
Алеш Крайник,
2
php-fpm - это устранение затрат на инициализацию. php-fpm предварительно запускает несколько процессов php, готовых обрабатывать запросы, и заставляет их спать до тех пор, пока запросы не поступят - это означает, что он может отвечать намного быстрее, чем традиционный cgi, потому что php уже работает при поступлении запросов, в отличие от традиционного CGI, где новый процесс php запускается для каждого запроса, php-fpm также не закрывает процесс php после обработки запросов, но продолжает использовать те же процессы. - с нулевыми накладными расходами на запуск и остановку процессов, php-fpm отвечает намного быстрее. запуск и остановка процессов занимает много времени.
Ханшенрик