Вопрос: Различия и диспропорции между: Fast-CGI, CGI, Mod-PHP, SuPHP, PHP-FPM


Существует несколько разных «оберток» php (?). Каковы различия между ними? Попытался сделать что-то в Google, но, похоже, не нашел информации. (mod-php не поддерживается googleable).

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


56
2017-11-20 10:31


Источник




Ответы:


Вопросы немного странные, неясно, задаете ли вы только 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, но может изменить пользователя / группу, в которой выполняется процесс

118
2017-11-20 11:05



Возможно, я уточню, что вдохновило меня на этот вопрос. Я просто получил VPS с панелью ISPConfig (панель «Опенсорс» на страницах администратора). Там я могу выбрать версию PHP для сервера / стороны. И они перечислены там. Итак, в основном, кажется, что использование PHP-FPM прерывает FastCGI с дополнительными «обертками»? - Gacek
Я не знаю, что панель ISPConfig действительно использует, но PHP работает как PHP-FPM, что PHP запустит собственный встроенный сервер FastCGI и будет прослушивать запросы через протокол FastCGI. HTTP-сервер будет получать запросы из Интернета, обрабатывая их, как обычно, и в случае, если страница должна быть запущена с использованием PHP, запрос будет передан FastCGI-протоколу на PHP, и результат будет отправлен обратно в браузер. Подумайте об этом как о HTTP-сервере, стоящем между браузером и сервером PHP (PHP-FPM FastCGI). PHP-FPM - это реализация протокола FastCGI. - Aleš Krajník
@ AlešKrajník благодарит за это подробное объяснение. Ну, я пытался запустить php как отдельный пользователь / группу. Поэтому я начал с Su-exec и попал в тупик, а затем пару человек рекомендовали php-fpm, которые вы объяснили. Тем не менее, я все еще запутался в модулях mog_cgi, mod_cgid, mod_fastcgi, mod_fcgi и о том, как они работают с php-fpm. Также я прочитал в другом учебнике, что они использовали mod_fcgid и mod_proxy_fcgi. Как трудно понять, как все части собрались вместе. - David Okwii
@landed PHP-FPM binary является частью каждого распределения PHP с 5.3.3 или 5.4.0 (проверьте это: php-fpm.org), для этой конкретной версии PHP. - Aleš Krajník
php-fpm - все об удалении затрат на инициализацию. php-fpm предварительно запускает несколько php-процессов, готовых обрабатывать запросы и засыпает их до тех пор, пока не появятся запросы, что означает, что он может реагировать намного быстрее, чем традиционный cgi, поскольку php уже работает, когда запросы поступают, в отличие от традиционных CGI, где для каждого запроса запускается новый php-процесс, также php-fpm не завершает процесс php после обработки запросов, но сохраняет повторное использование тех же процессов. - с 0 накладными расходами на запуск и остановку процессов, php-fpm отвечает намного быстрее. процессы запуска и остановки требуют времени. - hanshenrik