Коротко о CGI, FastCGI, PHP-FPM и mod_php

Статья последний раз была обновлена 28.11.2024

Вступление

Решил навести в голове порядок о том, как работают вместе веб-сервер и PHP. В настройках любого сервера или параметрах сайта в веб-панели можно указать различные режимы работы PHP.

При выборе режима работы отличного от «модуль Apache», есть возможность изменить версию PHP, если она установлена в операционной системе.

выбор режима работы php

Но сперва разберемся, чем отличается технология CGI от FCGI…

CGI

Common Gateway Interface, по-русски «общий интерфейс шлюза» — это стандарт, который описывает, как веб-сервер взаимодействует с CGI-скриптами.

Суть технологии в том, что веб-сервер (шлюз) получая запрос от клиента, преобразует его в CGI-форму, вызывает обработчик и конвертирует его ответ из CGI-формы в HTTP, возвращая клиенту.

В качестве CGI-скриптов/программ могут использоваться скрипты/программы, написанные на любых языках программирования, как на скриптовых (Shell), так и на компилируемых (C). CGI-скрипты в веб-разработке были популярны до того, как все стали использовать преимущественно PHP, хотя и сам интерпретатор PHP позволяет работать в режиме CGI.

Как вы уже поняли, CGI — это не язык программирования и не отдельная программа! Это просто протокол (стандарт, спецификация, соглашение, набор правил).

схема работы cgi

FastCGI он же FCGI

Дальнейшее развитие технологии CGI, является более производительным и безопасным, снимает множество ограничений CGI-программ. FCGI-программа работает следующим образом: программа единожды загружается в память в качестве демона (независимо от HTTP-сервера), а затем входит в цикл обработки запросов от HTTP-сервера. Один и тот же процесс обрабатывает несколько различных запросов один за другим, что отличается от работы в CGI-режиме, когда на каждый запрос создается отдельный процесс, «умирающий» после окончания обработки.

Написание FastCGI программ-демонов сложнее чем CGI, нужны дополнительные библиотеки, зависящие от языка. Опять же, сама аббревиатура FastCGI это не язык программирования и не отдельная программа, это как и в случае CGI — просто спецификация.

Теперь рассмотрим подробнее все режимы работы PHP по отдельности…

Режимы работы PHP

Я во всех случаях подразумеваю, что речь идет о каком-то дистрибутиве Linux.

PHP как модуль Apache

Это модуль для веб-сервера Apache (mod_php), позволяющий ему выполнять PHP-скрипты. Является, наверное, самым популярным и простым способом подружить Apache и PHP, не зря Apache настроен именно на этот режим сразу после установки. Модуль не использует ни CGI, ни FastCGI. В данном режиме используется стандартная версия PHP, то-есть установленная по-умолчанию в конкретной версии конкретного дистрибутива.

Есть свои минусы — скрипты работают под пользователем веб-сервера, невозможно использовать больше одной версии PHP. Чтобы для каждого сайта использовать отдельного пользователя необходимы дополнительные модули Apache вроде MPM-ITK.

PHP в режиме CGI

PHP в режиме CGI — это самый старый способ выполнения PHP-скриптов веб-сервером. Для Apache нужен модуль mod_cgi, поставляется вместе с ним. Nginx из коробки поддержки не имеет, хотя существуют дополнительные инструменты.

Apache на каждый запрос создает отдельный процесс, который в свою очередь обрабатывает PHP-скрипт.

В данном режиме возможен выбор версии PHP, но сейчас он используется редко в силу малой производительности.

PHP в режиме FastCGI

Для работы с Apache нужен модуль mod_fcgid или mod_fastcgi. Nginx умеет работать с FCGI-приложениями из коробки, но именно для PHP дополнительно нужен PHP-FPM (см. ниже).

Следует помнить, что при работе PHP в режиме FastCGI в памяти висит сам интерпретатор PHP, а не какой-то конкретный PHP-скрипт. FCGI-процессы висят в памяти и обрабатывают несколько запросов, что существенно ускоряет обработку скриптов и сказывается на быстродействии сайта.

Также возможен выбор версии PHP.

На мой взгляд это самый «быстрый» режим!

PHP-FPM

FastCGI Process Manager — по-русски «менеджер процессов» FastCGI. Это альтернативная реализация FastCGI режима для PHP с несколькими дополнительными возможностями, которые обычно используются для высоконагруженных сайтов.

Изначально PHP-FPM представлял из себя набор патчей от Андрея Нигматулина, которые устраняли ряд проблем, мешающих полноценно использовать PHP в режиме FastCGI (список улучшений). С версии PHP 5.3 набор патчей включен в ядро.

Используется в основном в связке с Nginx, без установки Apache. Можно сказать — нативный режим для Nginx! Необходимо иметь в виду, что в данном режиме не обрабатывается файл .htaccess, что требует переноса правил из .htaccess в конфигурацию Nginx.

Как и в предыдущих двух, в данном режиме возможен выбор версии PHP.

kupereal

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *