Php fpm настройка pool

Как настроить PHP-FPM для веб-сервера Nginx

PHP-FPM (FastCGI Process Manager) — это альтернативная реализация FastCGI для PHP с дополнительными функциями, которые полезны для сайтов с высоким трафиком. Это предпочтительный метод обработки PHP-страниц с помощью NGINX, который работает быстрее, чем традиционные методы CGI (SUPHP или mod_php для запуска PHP-скрипта). Основное преимущество PHP-FPM заключается в том, что он использует значительно меньше памяти и CPU по сравнению с любыми другими методами запуска PHP. Основная причина такого поведения — он демонизирует PHP, тем самым превращая его в фоновый процесс и предоставляя скрипт CLI для управления PHP-запросами.

Требования

  • Вы можете открыть SSH-сессию в системе Ubuntu от имени пользователя root или sudo.
  • В системе должны быть установлены NGINX и PHP.

Этапы настройки PHP-FPM с NGINX

  • Установка PHP-FPM
  • Конфигурация пула PHP-FPM
  • Настройка NGINX для работы с PHP-FPM
  • Тест конфигурации NGINX и PHP-FPM

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

Nginx не знает, как запустить свой PHP-скрипт. Для эффективного управления этими скриптами ему нужен PHP-модуль (например PHP-FPM). PHP-FPM работает вне среды NGINX, создавая отдельный процесс. Поэтому, когда пользователь запрашивает страницу PHP, сервер nginx передает запрос службе PHP-FPM с помощью FastCGI. Установка php-fpm в Ubuntu зависит от PHP и его версии. Перед установкой FPM на ваш сервер следует проверить документацию установленной версии PHP. Предположим, что вы установили последнюю версию PHP 7.3, значит вы можете установить FPM с помощью следующей команды apt-get:

Сервис FPM запустится автоматически после завершения установки. Чтобы проверить его статус, выполните следующую команду systemd:

Читайте также:  Название документа

# systemctl status php7.3-fpm

php7.3-fpm.service - The PHP 7.3 FastCGI Process Manager Loaded: loaded (/lib/systemd/system/php7.3-fpm.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2019-02-17 06:29:31 UTC; 30s ago Docs: man:php-fpm7.3(8) Main PID: 32210 (php-fpm7.3) Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec" Tasks: 3 (limit: 1152) CGroup: /system.slice/php7.3-fpm.service ├─32210 php-fpm: master process (/etc/php/7.3/fpm/php-fpm.conf) ├─32235 php-fpm: pool www └─32236 php-fpm: pool www

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

Сервис php-fpm создает пул по умолчанию, конфигурация которого (www.conf) находится в папке /etc/php/7.3/fpm/pool.d. Вы можете настроить пул по умолчанию в соответствии с вашими требованиями. Также рекомендуется создавать индивидуальные пулы для более эффективного управления ресурсами каждого процесса FPM. Кроме того, отделение пулов FPM позволит им работать независимо друг от друга, создавая собственный мастер-процесс. Это означает, что каждое php-приложение может иметь свои параметры кэша. Изменение конфигурации одного пула не требует запуска или остановки остальных пулов FPM.

Давайте создадим пул FPM для эффективного запуска PHP-приложения отдельным пользователем. Для начала создайте нового пользователя, который будет иметь исключительные права на этот пул:

# groupadd wordpress_user
# useradd -g wordpress_user wordpress_user

Теперь перейдите в каталог конфигурации FPM и создайте файл настроек с помощью любого текстового редактора, например vi:

# cd /etc/php/7.3/fpm/pool.d
# vi wordpress_pool.conf

[wordpress_site] user = wordpress_user group = wordpress_user listen = /var/run/php7.2-fpm-wordpress-site.sock listen.owner = www-data listen.group = www-data php_admin_value[disable_functions] = exec,passthru,shell_exec,system php_admin_flag[allow_url_fopen] = off ; Choose how the process manager will control the number of child processes. pm = dynamic pm.max_children = 75 pm.start_servers = 10 pm.min_spare_servers = 5 pm.max_spare_servers = 20 pm.process_idle_timeout = 10s

Рассмотрим подробнее приведенные выше параметры конфигурации FPM и их значения:

  • [wordpress_site]: название, которое должно быть уникальным для каждого пула.
  • user и group: пользователь и группа, под которыми будет работать пул.
  • listen: название файла сокета для этого пула.
  • listen.owner и listen.group: должны соответствовать пользователю и группе, на которых работает NGINX. В нашем случае это www-data.
  • php_admin_value: позволяет устанавливать пользовательские значения конфигурации php.
  • php_admin_flag: позволяет устанавливать логические флаги PHP.
  • pm: параметры менеджера процессов. Значение Dynamic означает, что количество дочерних процессов устанавливается динамически на основе следующих директив:
    • pm.max_children: максимальное количество дочерних процессов, которые могут быть одновременно активны.
    • pm.start_servers: количество дочерних процессов, создаваемых при запуске.
    • pm.min_spare_servers: минимальное количество дочерних процессов в состоянии ожидания (ожидающих обработки). Если количество простаивающих процессов меньше этого числа, то будет создано несколько дочерних.
    • pm.max_spare_servers: максимальное количество дочерних процессов в состоянии ожидания (ожидающих обработки). Если количество простаивающих процессов больше этого числа, некоторые дочерние будут завершены.
    • pm.process_idle_timeout: желаемое максимальное количество простаивающих процессов сервера. Используется только при установке значения pm в “dynamic”. Кроме вышеуказанных параметров, также можно передавать несколько системных переменных в сервис php-fpm, с помощью env[‘PHP_FOO’] = $bar. Например, добавление следующих опций в приведенный выше файл конфигурации установит имя хоста и расположение временной папки в среде PHP.
    . . env[HOSTNAME] = $HOSTNAME env[TMP] = /tmp . . 

    Настройки менеджеров процессов в приведенном выше файле конфигурации пула установлены как “dynamic”. Выберите параметр, который лучше всего соответствует вашим требованиям. Существуют также и другие конфигурации для менеджера процессов:

    • Static: будет поддерживаться фиксированное количество процессов PHP.
    • ondemand : дочерние процессы при запуске не создаются. Они будут создаваться при получении новых запросов на сервере.

    После создания файла конфигурации необходимо перезапустить сервис fpm, чтобы применить новые настройки:

    После этого будет создан пул FPM для обслуживания php-страниц. Обратите внимание, что вы можете создать отдельный сервис systemd для данного пула, указав вышеупомянутый файл конфигурации FPM. Это позволит вам запускать/останавливать этот пул, не влияя на другие пулы.

    3: Настройка NGINX для PHP-FPM

    Теперь создайте server block NGINX, который будет использовать указанный выше пул FPM. Для этого отредактируйте файл конфигурации NGINX и укажите путь к файлу пула с помощью опции fastcgi_pass внутри location block для php.

    server  listen 80; server_name example.journaldev.com; root /var/www/html/wordpress; access_log /var/log/nginx/example.journaldev.com-access.log; error_log /var/log/nginx/example.journaldev.com-error.log error; index index.html index.htm index.php; location /  try_files $uri $uri/ /index.php$is_args$args; > location ~ \.php$  fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php7.2-fpm-wordpress-site.sock; fastcgi_index index.php; include fastcgi.conf; > >

    Убедитесь, что приведенные выше параметры конфигурации синтаксически верны, и перезапустите NGINX.

    # nginx-t
    # systemctl restart nginx

    4: Тестирование конфигурации PHP-FPM NGINX

    Для проверки того, использует ли вышеуказанный файл конфигурации NGINX только что созданный пул FPM, создайте файл phpinfo в root каталоге веб-сервера. Мы используем /var/www/html/wordpress в качестве веб-сервера в приведенном выше файле конфигурации NGINX. Измените это значение в соответствии с вашей средой.

    После создания страницы с информацией о PHP, откройте ее в любом браузере. Вы заметите, что значения переменных $_SERVER[‘USER’] и $_SERVER[‘HOME’] указывают на wordpress_user и /home/wordpress_user соответственно — их мы ранее установили в файле конфигурации FPM, это подтверждает, что NGINX обслуживает php-страницы с помощью выбранного пула FPM.

    Подводим итоги

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

    Читайте также:

    Источник

Оцените статью