PHP FastCGI Process Manager - PHP-FPM ⋆ ALexHost SRL

Проверьте свои навыки на всех наших услугах хостинга и получите скидку 15%!.

Используйте код при регистрации:

Skills
18.12.2024
No categories

PHP FastCGI Process Manager – PHP-FPM

Введение в PHP-FPM

PHP – один из самых распространенных языков программирования для веб-разработки. Когда речь идет об эффективной обработке больших объемов трафика, производительность PHP может существенно повлиять на общую скорость и отзывчивость веб-сайтов. Именно здесь на помощь приходит PHP FastCGI Process Manager (PHP-FPM). PHP-FPM – это широко распространенный альтернативный обработчик PHP, который обеспечивает высокопроизводительный метод выполнения PHP-скриптов.

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

Что такое PHP-FPM?

PHP-FPM, или PHP FastCGI Process Manager, – это реализация FastCGI для PHP-скриптов. FastCGI – это протокол, используемый для повышения производительности веб-серверов за счет более эффективной обработки запросов, чем стандартный CGI (Common Gateway Interface). В то время как CGI создает новый процесс для каждого запроса (что приводит к большому потреблению ресурсов), FastCGI поддерживает пул рабочих процессов, готовых обработать несколько запросов, что снижает накладные расходы.

PHP-FPM добавляет слой управления процессами поверх FastCGI, позволяя реализовать такие функции, как объединение процессов, порождение рабочих процессов по требованию, плавное завершение работы и возможность легко справляться с высоким трафиком. Сейчас это де-факто стандартный обработчик PHP для многих современных веб-серверов, включая NGINX и Apache.

Почему стоит использовать PHP-FPM?

  1. Улучшенная производительность: PHP-FPM может обрабатывать больше одновременных запросов с меньшими ресурсами, снижая нагрузку на сервер и ускоряя время отклика. Это особенно полезно для сайтов с высокой посещаемостью или приложений, которые испытывают резкие скачки трафика.
  2. Управление процессами: PHP-FPM позволяет тонко настраивать управление процессами, давая вам контроль над тем, как PHP обрабатывает запросы. Он использует пул рабочих, который можно настроить в соответствии с ожидаемой нагрузкой, обеспечивая эффективное использование ресурсов сервера.
  3. Более эффективное использование ресурсов: Поскольку PHP-FPM объединяет процессы в пул, он может обслуживать несколько запросов с помощью одних и тех же рабочих, сводя к минимуму необходимость постоянно создавать и завершать процессы. Это повышает эффективность использования памяти и процессора.
  4. Благодатная деградация: При правильной настройке PHP-FPM может плавно деградировать, сокращая количество активных процессов, если сервер перегружен, предотвращая тем самым полный крах.
  5. Расширенные возможности: PHP-FPM включает в себя такие расширенные функции, как slow-log для отладки, адаптивное порождение процессов и отчеты о состоянии, которые позволяют получить представление о производительности и здоровье ваших PHP-приложений.

Ключевые особенности PHP-FPM

  • Пулы процессов: PHP-FPM позволяет вам определить несколько пулов рабочих процессов PHP. Каждый пул может быть настроен с различными параметрами, что позволяет запускать на одном сервере различные PHP-приложения с разными требованиями к трафику.
  • Адаптивное порождение процессов: PHP-FPM может автоматически масштабировать количество рабочих процессов в зависимости от уровня трафика. Он начинает с минимального количества рабочих процессов и может увеличивать размер пула по мере необходимости, не расходуя ресурсы в периоды низкого трафика.
  • Медленный журнал: Функция медленного журнала в PHP-FPM записывает запросы, которые превышают заданное время выполнения. Это помогает разработчикам выявлять и устранять узкие места в PHP-коде.
  • Страница состояния: PHP-FPM предоставляет встроенную страницу состояния, на которой в режиме реального времени отображается информация о состоянии пула, активных рабочих, простаивающих рабочих и другие показатели, которые можно использовать для мониторинга производительности.
  • Грациозное завершение работы: PHP-FPM может плавно завершать процессы, позволяя текущим запросам завершиться перед выключением. Это предотвращает внезапное завершение запущенных скриптов, обеспечивая лучшее качество работы пользователей.

Принцип работы PHP-FPM

PHP-FPM работает как отдельный FastCGI-сервер, который интегрируется с веб-сервером, таким как NGINX или Apache, для обслуживания PHP-скриптов. Когда поступает запрос, веб-сервер направляет его службе PHP-FPM, которая управляет пулом рабочих процессов, выполняющих PHP-код и отправляющих результат обратно на веб-сервер для доставки клиенту.

Вот упрощенная схема того, как PHP-FPM обрабатывает запрос:

  1. Запрос клиента: Пользователь запрашивает веб-страницу, содержащую PHP-код.
  2. Веб-сервер получает запрос: Веб-сервер (NGINX или Apache) получает запрос и пересылает его службе PHP-FPM по протоколу FastCGI.
  3. Рабочий процесс PHP-FPM обрабатывает запрос: Один из рабочих процессов в пуле PHP-FPM обрабатывает запрос, выполняет PHP-скрипт и возвращает результат.
  4. Ответ отправляется обратно: Веб-сервер получает результат и отправляет его обратно клиенту в виде конечного HTML-файла.

Установка и настройка PHP-FPM

Шаг 1: Установка PHP-FPM

В большинстве дистрибутивов Linux PHP-FPM может быть установлен через менеджеры пакетов. Ниже приведены команды для распространенных систем:

# Для Debian/Ubuntu
sudo apt update
sudo apt install php-fpm
# Для CentOS/RHEL
sudo yum install php-fpm

После установки вы можете запустить службу PHP-FPM:

sudo systemctl start php-fpm

Шаг 2: Настройка пулов PHP-FPM

Основной конфигурационный файл для PHP-FPM обычно находится в /etc/php/7.x/fpm/pool.d/ или /etc/php-fpm.d/ в зависимости от вашего дистрибутива и версии PHP. Каждый пул определяется в своем собственном файле, обычно названном в честь веб-сайта или приложения, которое он обслуживает. Вот пример конфигурации пула:

[www]
пользователь = www-data
группа = www-data
listen = /run/php/php7.4-fpm.sock
listen.owner = www-data
listen.group = www-data
pm = динамический
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pm.max_requests = 500

  • pm = dynamic: Менеджер процессов может динамически регулировать количество рабочих процессов в зависимости от потребности.
  • pm.max_children: Максимальное количество рабочих процессов, которые могут быть порождены для обработки запросов.
  • pm.start_servers: Количество рабочих процессов, запускаемых при запуске PHP-FPM.
  • pm.min_spare_servers и pm.max_spare_servers: Определяют минимальное и максимальное количество незадействованных рабочих процессов, позволяя PHP-FPM масштабировать ресурсы в зависимости от нагрузки.
  • pm.max_requests: Максимальное количество запросов, которое может обработать рабочий, прежде чем он будет завершен и заменен. Это помогает предотвратить утечку памяти в долго работающих скриптах.

Шаг 3: Настройка веб-сервера на использование PHP-FPM

Для NGINX:

В конфигурационном файле NGINX (например, /etc/nginx/sites-available/example.com) настройте PHP-FPM в качестве обработчика PHP:

server {
listen 80;
имя_сервера example.com;
root /var/www/html;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}
}

Для Apache:

Чтобы включить PHP-FPM в Apache, убедитесь, что модуль mod_proxy_fcgi включен:

sudo a2enmod proxy_fcgi setenvif

Затем обновите конфигурацию виртуального хоста Apache:


Имя сервера example.com
Корень документа /var/www/html
SetHandler “proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost/”

</VirtualHost

Шаг 4: Тестирование конфигурации

После настройки PHP-FPM и вашего веб-сервера перезапустите службы, чтобы применить изменения:

# Для NGINX
sudo systemctl restart nginx

# Для Apache
sudo systemctl restart apache2

Чтобы убедиться, что PHP-FPM работает, создайте файл phpinfo.php в корневом каталоге вашего сайта:

?php
phpinfo();
?>

Зайдите в этот файл в браузере (например, http://example.com/phpinfo.php) и посмотрите, указан ли PHP-FPM в качестве обработчика.

Заключение

PHP-FPM – это важный инструмент для оптимизации производительности PHP, особенно для сайтов с высокой посещаемостью. Он обеспечивает значительные преимущества по сравнению с традиционными обработчиками PHP, эффективно управляя процессами, улучшая использование ресурсов сервера и предлагая такие дополнительные функции, как адаптивное масштабирование процессов и медленное протоколирование. Настроив PHP-FPM в соответствии с вашими потребностями, вы сможете обеспечить бесперебойную и эффективную работу ваших PHP-приложений даже при высоких нагрузках.

Следуя шагам из этого руководства, вы сможете настроить и оптимизировать PHP-FPM для своих PHP-проектов.

Проверьте свои навыки на всех наших услугах хостинга и получите скидку 15%!.

Используйте код при регистрации:

Skills