Php коротко про cgi, fastcgi, php-fpm і mod_php
Вирішив навести в голові порядок про те, як працюють разом веб-сервер і PHP.
Common Gateway Interface, "загальний інтерфейс шлюзу" - це стандарт, який описує, як веб-сервер повинен запускати прикладні програми (скрипти), як повинен передавати їм параметри HTTP-запиту, як програми повинні передавати результати своєї роботи веб-сервера. Прикладну програму взаємодіє з веб-сервером по протоколу CGI прийнято називати шлюзом. хоча більш поширена назва CGI-скрипт або CGI-програма.
Як CGI-програм можуть використовуватися програми / скрипти написані на будь-яких мовах програмування, як на компільованих, так і на скриптових, і навіть на shell.
CGI-скрипти були популярні до того, як для веб-розробки стали переважно використовувати PHP. Хоча сам PHP інтерпретатор дозволяє працювати в режимі CGI (див. Нижче).
Основний момент: "CGI" це не мова програмування і не окрема програма! Це просто протокол (стандарт, специфікація, угода, набір правил).
Подальший розвиток технології CGI, є більш продуктивним і безпечним, знімає безліч обмежень CGI-програм.
FastCGI програма працює наступним чином: програма одного разу завантажується в пам'ять як демона (незалежно від HTTP-сервера), а потім входить в цикл обробки запитів від HTTP-сервера. Один і той же процес обробляє кілька різних запитів один за іншим, що відрізняється від роботи в CGI-режимі, коли на кожен запит створюється окремий процес, "вмираючий" після закінчення обробки.
Написання FastCGI програм-демонів складніше ніж CGI, потрібні додаткові бібліотеки, що залежать від мови.
Знову ж, сама абревіатура FastCGI це не мова програмування і не окрема програма, це як і в випадку CGI - просто специфікація.
PHP в режимі CGI
PHP в режимі CGI це найстаріший спосіб виконання php-скриптів веб-сервером. Режим доступний за умовчанням, однак може бути відключений при компіляції.
Для Apache потрібен модуль mod_cgi (поставляється разом з Apache). Nginx з коробки підтримки не має, хоча існують додаткові інструменти.
В даний момент режим використовується рідко в силу малої продуктивності.
PHP в режимі FastCGI
Крім CGI режиму, PHP з коробки вміє працювати і в FastCGI режимі (з версії 5.3 навіть в двох FastCGI режимах). Режим включається прапором при компіляції інтерпретатора, прапор залежить від версії PHP.
Для роботи з Apache потрібен модуль mod_fcgid або mod_fastcgi. або зв'язка з mod_proxy_fcgi + PHP-FPM.
Nginx вміє працювати з FastCGI додатками з коробки, але саме для PHP додатково потрібен PHP-FPM (див. Нижче).
Слід пам'ятати, що при роботі PHP в режимі FastCGI в пам'яті висить сам php інтерпретатор, а не якийсь конкретний php-скрипт.
FastCGI Process Manager, "Менеджер процесів FastCGI". Це альтернативна реалізація FastCGI режиму в PHP з неяк-кими додат-ні-тель-ними мож-ли-во-стя-ми, кото-які зазвичай викорис-зу-ються для висо-ко-на-гру-дружин-них сайтів .
Спочатку PHP-FPM вдавав із себе набір патчів від Андрія Нігматуліна, які усували ряд проблем, що заважають повноцінно використовувати PHP в режимі FastCGI (список поліпшень). З версії PHP 5.3 набір патчів включений в ядро, а додаткові можливості PHP-FPM включаються прапором при компіляції.
PHP-FPM використовується в основному в зв'язці з Nginx, без установки Apache.
Це модуль для Apache, що дозволяє йому виконувати php скрипти. Є напевно найпопулярнішим і простим способом подружити Apache і PHP. Модуль не використовує ні CGI, ні FastCGI. Є свої мінуси - скрипти працюють під користувачем веб-сервера, неможливо використовувати більше однієї версії PHP.