Коротко о CGI, FastCGI, PHP-FPM и mod_php
Все указанные ниже механизмы являются SAPI, которые позволяют серверу взаимодействовать со сценариями, написанными на PHP.
PHP в режиме CGI
PHP в режиме CGI это самый старый способ выполнения php-скриптов веб-сервером. Режим доступен по умолчанию, однако может быть отключён при компиляции. Для Apache нужен модуль mod_cgi
(поставляется вместе с Apache). Nginx из коробки поддержки не имеет, хотя существуют дополнительные инструменты. В данный момент режим используется редко в силу малой производительности.
Common Gateway Interface — это стандарт, который описывает, как веб-сервер должен запускать прикладные программы (скрипты), как должен передавать им параметры HTTP-запроса, как программы должны передавать результаты своей работы веб-серверу. Прикладную программу взаимодействующую с веб-сервером по протоколу CGI принято называть шлюзом, хотя более распространено название CGI-скрипт или CGI-программа.
В качестве CGI-программ могут использоваться программы/скрипты написанные на любых языках программирования, как на компилируемых, так и на скриптовых, и даже на shell. CGI-скрипты были популярны до того, как для веб-разработки стали преимущественно использовать PHP.
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 — это дальнейшее развитие технологии CGI, является более производительным и безопасным, снимает множество ограничений CGI-программ.
FastCGI программа работает следующим образом: программа единожды загружается в память в качестве демона (независимо от HTTP-сервера), а затем входит в цикл обработки запросов от HTTP-сервера. Один и тот же процесс обрабатывает несколько различных запросов один за другим, что отличается от работы в CGI-режиме, когда на каждый запрос создается отдельный процесс, «умирающий» после окончания обработки.
PHP-FPM
FastCGI Process Manager, «Менеджер процессов FastCGI». Это альтернативная реализация FastCGI режима в PHP с несколькими дополнительными возможностями, которые обычно используются для высоконагруженных сайтов.
Изначально PHP-FPM представлял из себя набор патчей от Андрея Нигматулина, которые устраняли ряд проблем, мешающих полноценно использовать PHP в режиме FastCGI. С версии PHP 5.3 набор патчей включён в ядро, а дополнительные возможности PHP-FPM включаются флагом при компиляции.
PHP-FPM используется в основном в связке с Nginx, без установки Apache.
Модуль mod_php
Это модуль для Apache, позволяющий ему выполнять php скрипты. Является наверно самым популярным и простым способом подружить Apache и PHP. Модуль не использует ни CGI, ни FastCGI. Есть свои минусы — скрипты работают под пользователем веб-сервера, невозможно использовать больше одной версии PHP.
- Режимы запуска интерпретатора PHP (SAPI)
- Установка PHP как FastCGI под Apache (Windows 10)
- Установка Nginx, MySQL и PHP на Ubuntu 18.04 LTS
- Установка Apache, MySQL и PHP на Ubuntu 18.04 LTS
- PHP-FPM. Установка и настройка
- Apache2. Установка и настройка. Часть 2 из 2
- Apache2. Установка и настройка. Часть 1 из 2
Поиск: Apache • CGI • FPM • FastCGI • Nginx • PHP • SAPI • Web-разработка