- Вопрос или проблема
- CGI (Общий интерфейс шлюза)
- FastCGI (Улучшенный CGI):
- mod_php:
- SuPHP (mod_suphp) – СТАРЫЙ:
- PHP-FPM (Менеджер процессов FastCGI):
- Ответ или решение
- Различия и преимущества/недостатки между FastCGI, CGI, mod_php, SuPHP и PHP-FPM
- 1. CGI (Common Gateway Interface)
- 2. FastCGI
- 3. mod_php
- 4. SuPHP
- 5. PHP-FPM (FastCGI Process Manager)
- Выбор подхода для вашего проекта
- Заключение
Вопрос или проблема
Существует несколько различных “оберток” для PHP(?). В чем их отличия? Пытался поискать в Гугле, но не могу найти информации. (mod-php не поддается поиску).
Почему я мог бы выбрать одну из них, а не другую?
CGI и FastCGI — это два протокола, не связанные с PHP:
-
CGI-скрипты — это способ запуска серверного скрипта (не только PHP!) при приходе HTTP-запроса. В этой настройке веб-сервер запускает новый процесс CGI для каждого входящего запроса, что создает значительную нагрузку на производительность.
-
FastCGI — это “улучшенный CGI” – чтобы устранить ограничения CGI, FastCGI работает как сервер (TCP или UNIX), что позволяет повторно использовать ресурсы между запросами.
PHP-совместимый веб-сервер может быть настроен следующим образом:
-
mod_php — это модуль Apache для запуска PHP. В этой настройке запросы PHP обрабатываются в процессе Apache со всеми сопутствующими аспектами: процессы PHP определяются в конфигурации Apache, PHP работает под пользователем и правами Apache и т.д.
-
PHP-FPM — это реализация FastCGI для PHP. В этой настройке PHP-FPM работает как отдельный сервер FastCGI, и Apache подключается к нему с использованием модулей FastCGI, таких как
mod_fcgid
,mod_fastcgi
илиmod_proxy_fcgi
(Apache 2.4+). В этой конфигурации права, связанные с процессами и все остальное контролируется сервером PHP-FPM. Производительность сопоставима сmod_php
. -
SuPHP – это использовалось для устранения некоторых недостатков
mod_php
относительно прав доступа: сmod_php
скрипты PHP выполняются под пользователем/группой Apache, ноmod_suphp
может запускать скрипты как другого пользователя. SuPHP больше не поддерживается и не должен использоваться. -
CGI/FastCGI – я добавил это на основе вопроса в комментариях. Не зная деталей настройки, PHP можно запускать как сервер FastCGI, используя любую другую реализацию FastCGI – как объясняется в другом вопросе. Я не использую эту настройку и не вижу преимущество перед PHP-FPM.
-
CGI – PHP также можно запускать как старый добрый CGI-скрипт, но я не могу представить ни одного подходящего случая для этого, кроме совместимости с очень устаревшими средами.
Что касается преимуществ и недостатков этих различных подходов, я рассматриваю только mod_php
и PHP-FPM, охватывая два основных случая:
-
mod_php
может быть полезен в некоторых настройках Docker, где вы хотите предоставить один контейнер с работающим сервером веб-приложений на PHP. Факт того, что все работает как один процесс, упрощает конфигурацию контейнера Docker. С другой стороны, запуск сервера PHP-FPM в одном контейнере с веб-сервером потребует оркестрации процессов либо с помощью supervisord, сложного скриптинга на bash или другого подхода и противоречит лучшим практикам написания контейнеров Docker. -
PHP-FPM — это более мощный подход, который лучше разделяет задачи, поэтому сервер PHP-FPM можно настроить, (оптимизировать по производительности) и обслуживать отдельно от веб-сервера. Это также позволяет запускать сервер PHP-FPM в пуле или на другой машине, отличной от веб-сервера. Как уже упоминалось, для контейнеров Docker рекомендуется отдельные контейнеры PHP-FPM и веб-сервера в этом случае, что делает конфигурацию более сложной (и более мощной). Подход PHP-FPM также является единственным способом с веб-сервером nginx, так как модуля PHP для него, насколько мне известно, не существует.
Моя реализация Docker двух вышеупомянутых подходов доступна здесь:
- https://gitlab.com/craynic.com/docker/lap/ – подход с одним контейнером, работающий на PHP 7.4/8.0 как модуль Apache
- https://gitlab.com/craynic.com/craynic.net/mvh – много контейнерный подход, разделяющий PHP-FPM и веб-сервер Apache
Реализация предназначена для работы с некоторыми моими устаревшими и новыми проектами в моем кластере Kubernetes. Используйте на здоровье.
Итак, кратко:
- CGI, FastCGI — это протоколы; CGI медленный, FastCGI намного быстрее
mod_php
и PHP-FPM — это два основных способа запуска PHPmod_SuPHP
был подходом, использовавшимся для устранения недостатковmod_php
. Он устарел, и вместо него следует использовать PHP-FPM.
CGI (Общий интерфейс шлюза)
- Описание: CGI — это один из старейших методов выполнения серверных скриптов. Он работает, создавая новый процесс для каждого запроса, что может привести к высокому потреблению ресурсов.
- Преимущества:
Платформонезависимость.
Легкость в настройке и конфигурировании. - Недостатки:
Высокое потребление ресурсов из-за создания процессов для каждого запроса.
Медленная производительность по сравнению с другими методами.
FastCGI (Улучшенный CGI):
- Описание: FastCGI — это улучшенная версия CGI, которая преодолевает проблемы с производительностью, используя постоянные процессы для обработки нескольких запросов.
- Преимущества:
Лучшие показатели производительности, чем у CGI благодаря постоянству процессов.
Сниженное потребление ресурсов. - Недостатки:
Сложность конфигурации по сравнению с CGI.
mod_php:
- Описание: mod_php — это модуль Apache HTTPD, который встраивает интерпретатор PHP непосредственно в веб-сервер, позволяя PHP-коду выполняться в нативном режиме.
- Преимущества:
Хорошая производительность, поскольку PHP-код выполняется внутри серверного процесса.
Легкость в конфигурировании и управлении. - Недостатки:
Риски безопасности, если конфигурация выполнена неправильно.
Отсутствие изоляции процессов может привести к проблемам со стабильностью.
Высокое потребление ресурсов веб-сервером Apache HTTPD.
SuPHP (mod_suphp) – СТАРЫЙ:
- Описание: SuPHP — это инструмент для выполнения PHP-скриптов с правами их владельцев, повышая безопасность за счет ограничения доступа к файлам.
- Преимущества:
Повышенная безопасность за счет запуска скриптов с правами пользователей.
Изоляция процессов для повышения стабильности. - Недостатки:
Нагрузка из-за проверки прав доступа для каждого запроса.
Сложность конфигурации по сравнению с другими методами.
PHP-FPM (Менеджер процессов FastCGI):
- Описание: PHP-FPM (сам по себе) — это менеджер процессов для FastCGI, который повышает производительность и масштабируемость, управляя пулами процессов PHP. Но контекст — это реализация протокола FastCGI.
- Преимущества:
Эффективное управление процессами для обработки высоких нагрузок.
Улучшенная производительность и масштабируемость. - Недостатки:
Требует дополнительной конфигурации по сравнению с традиционным FastCGI.
Сложность установки и настройки пулов процессов.
В заключение, FastCGI и PHP-FPM являются популярными выборами для высокопроизводительных веб-приложений на PHP, в то время как mod_php может быть подходящим для более простых настроек.
Ответ или решение
Различия и преимущества/недостатки между FastCGI, CGI, mod_php, SuPHP и PHP-FPM
В мире веб-разработки существует множество подходов для работы с PHP, каждый из которых имеет свои особенности и назначение. В данном ответе мы подробно обсудим CGI, FastCGI, mod_php, SuPHP и PHP-FPM, а также их ключевые различия и возможные варианты применения.
1. CGI (Common Gateway Interface)
- Описание: CGI является одним из древнейших методов выполнения серверных скриптов. Он создает новый процесс для каждого входящего HTTP-запроса.
- Преимущества:
- Платформенная независимость и простота конфигурации.
- Недостатки:
- Высокое потребление ресурсов из-за постоянного создания процессов.
- Низкая производительность по сравнению с более современными подходами.
2. FastCGI
- Описание: FastCGI представляет собой улучшенную версию CGI, которая решает проблемы с производительностью за счет использования постоянных процессов для обработки нескольких запросов.
- Преимущества:
- Лучше производительность, чем у CGI благодаря многопоточности.
- Меньшее потребление ресурсов.
- Недостатки:
- Более сложная настройка по сравнению с CGI.
3. mod_php
- Описание: mod_php — это модуль для Apache HTTPD, который позволяет встраивать интерпретатор PHP прямо в веб-сервер, что позволяет выполнять PHP-код нативно.
- Преимущества:
- Высокая производительность, поскольку PHP-код выполняется в процессе сервера.
- Простота настройки и управления.
- Недостатки:
- Повышенные риски безопасности при неверной конфигурации.
- Отсутствие изоляции процессов, что может привести к проблемам с стабильностью.
- Высокое потребление ресурсов со стороны Apache.
4. SuPHP
- Описание: SuPHP обеспечивает выполнение PHP-скриптов с правами их владельцев, что улучшает безопасность за счет ограничения доступа к файлам.
- Преимущества:
- Улучшенная безопасность за счет выполнения скриптов от имени пользователя.
- Изоляция процессов для повышения стабильности.
- Недостатки:
- Перегрузка из-за проверки прав доступа для каждого запроса.
- Более сложная настройка по сравнению с другими методами.
- Неактуальность: SuPHP больше не поддерживается, поэтому его использование не рекомендуется.
5. PHP-FPM (FastCGI Process Manager)
- Описание: PHP-FPM — это процессный менеджер для FastCGI, который улучшает производительность и масштабируемость, управляя пулами PHP-процессов.
- Преимущества:
- Эффективное управление процессами для обработки высоких нагрузок.
- Улучшенная производительность и масштабируемость.
- Недостатки:
- Требует дополнительной настройки по сравнению с традиционным FastCGI.
- Сложность в установке и настройке пулов процессов.
Выбор подхода для вашего проекта
При выборе подхода к выполнению PHP необходимо учитывать специфику вашего проекта и его архитектуру.
-
Для простых проектов или Docker-контейнеров: mod_php может быть предпочтительным, так как он предлагает простоту настройки и управления при меньших требованиях к инфраструктуре.
-
Для высоконагруженных приложений: PHP-FPM обеспечивает лучшую производительность и масштабируемость, что делает его идеальным выбором для современных веб-приложений, особенно при использовании с NGINX.
-
Существующие системы: Если вы работаете с устаревшими системами или определенными требованиями к правам доступа, возможно, вам придется рассмотреть использование FastCGI, но избегать CGI, учитывая его недостатки в производительности.
Заключение
Каждый из методов имеет свои особенности, и выбор зависит от ваших требований к производительности, безопасности и простоте настройки. Разбирая подходы, такие как CGI и FastCGI, а также сравнивая mod_php, SuPHP и PHP-FPM, вы сможете выбрать оптимальный вариант для вашего проекта.
Для получения дополнительной информации или детального обсуждения, не стесняйтесь обращаться за помощью специализированных IT-экспертов!