Відмінності та дис / просування між: Fast-CGI, CGI, Mod-PHP, SuPHP, PHP-FPM


73

Існує небагато різних php "обгортків" (?). Які між ними відмінності? Намагався гугл дещо, але, схоже, не знаходив інформації. (mod-php не може бути googleable).

Чому я можу обрати одне над іншим?

Відповіді:


141

Питання дещо дивні, незрозуміло, якщо ви запитуєте лише для PHP або ваше питання є більш загальним.

Я дам вам короткий огляд з боку PHP.

По-перше, два протоколи:

  • CGI-скрипти - це спосіб запустити сценарій на стороні сервера, коли надходить запит HTTP; це не має нічого спільного з PHP

  • FastCGI - це "кращий CGI" - CGI, як відомо, є повільним, швидкий CGI - це інший підхід із значно швидшими результатами; це також не має нічого спільного з PHP.

Тепер пов'язані з PHP речі:

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

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

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

Отже, в основному:

  • CGI, Fast-CGI - це протоколи; CGI повільний, Fast-CGI набагато швидший
  • mod_php (з підкресленням) та PHP-FPM - це два основних способи запуску PHP
  • mod_SuPHP схожий на mod_php, але може змінити користувача / групу, під якою працює процес

Можливо, я проясню, що мене надихнуло на це питання. Щойно я отримав VPS з панеллю ISPConfig (панель "Відкриття для сторінок адміністратора"). Там я можу обрати версію 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

@ 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

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 після обробки запитів, але продовжує повторно використовувати ті самі процеси. - з 0 накладними накладними процесами запуску і зупинки, php-fpm реагує набагато швидше. Запуск та зупинка процесів потребує часу.
hanshenrik
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.