(PHP 5.2.17, PHP-FPM 0.5.14)
Глобальные параметры
pid_file - pid файл. По умолчанию: то, что было указано при maleextra компилировании опцией --with-fpm-pid
error_log - файл журнала ошибок. По умолчанию: то, что было указано при компилировании опцией --with-fpm-log
log_level - уровень записываемых в журнал ошибок. По seo India умолчанию: "notice" (TODO: get list)
emergency_restart_threshold - при это числе рабочий процессов завершенных с SIGSEGV или SIGBUS... По умолчанию: 10
emergency_restart_interval - ...менее чем за этот промежуток instant performer времени, php-fpm будет мягко перезапущен. Это необходимо, чтобы исключить случайные повреждения памяти. По умолчанию: "1 минута"
process_control_timeout - время ожидания ответа от рабочий процессов. По умолчанию: "5 секунд"
daemonize - укажите "no" для отладки php-fpm или для его performer5 запуска в диспетчере (runit/sv, daemontools, upstart, etc.) По умолчанию: "yes"
Настройки пулов
Пул естественно может быть не один, а сколько вам потребуется. Это позволяет запускать их под разными системными пользователями, разными chroot'ами и т.д. Вообщем это дает определенною гибкость, так как позволяет в каждом пуле использовать свои собственные настройки под веб-приложение, которое будет его использовать. Улучшает безопасность, так как веб-приложения изолированы друг от друга и при компрометации одного приложения, остальные останутся в относительной безопасности. Кроме того это же и облегчает процесс обнаружения скомпрометированных веб-приложений.
В конфигурационном файле php-fpm.conf объявление 2-3 пулов будет выглядеть примерно так
<?xml version="1.0" ?>
<configuration>
<workers>
<section name="pool">
<value name="name">pool-1</value>
...
...
</section>
<section name="pool">
<value name="name">pool-2</value>
...
...
</section>
<section name="pool">
<value name="name">pool-3</value>
...
...
</section>
</workers>
</configuration>
Но так как PHP-FPM с PHP версий ниже 5.3.3 не поддерживает динамическое число дочерних процессов, то путем разнесения веб-приложений по свои отдельным php-fpm пулам, мы теряем по ресурсам. Связано это с тем что при static style pm кол-во процессов всегда одинаковое и если все процессы в одном пуле и ими пользуются все веб-приложения, то единовременно каждому приложению доступно на порядок большее число php-fpm процессов для обработки запросов, чем если бы у каждого приложения было по собственному персональному пулу.
name - имя пула, используется php-fpm'ом при ведении логов
listen_address - прослушиваемый адрес, здесь можно указать как сетевой адрес и порт, так и файловый сокет, например 127.0.0.1:9000 или tmp/php-fpm.sock, соответственно
owner - владелец, который будет назначен файловому сокету
group - группа, которая будет назначена файловому сокету
mode - права, которые будут выставлены на созданный файловый сокет
php_defines - описание настроек php, которые будут применены к данному пулу, перекрыв настройки указанные в /etc/php.ini. Например задание параметров max_execution_time и upload_max_filesize будет выглядеть вот так
<value name="php_defines">
<value name="max_execution_time">120</value>
<value name="upload_max_filesize">30</value>
</value>
slowlog - лог файл для записи в него информации о медленных запросах
rlimit_files - устанавливает лимит дескрипторов открытых файлов rlimit
rlimit_core - устанавливает максимальное кол-во используемых ядер rlimit
chroot - директория chroot окружения при запуске. Путь должен быть абсолютным
chdir - изменяет текущую директория при запуске
catch_workers_output - перенаправление STDOUT и STDERR рабочего процесса в главный лог ошибок. Если не установлен, STDOUT и STDERR будут перенаправлены в /dev/null в соответствии со спецификацией FastCGI
max_requests - кол-во запросов которое может обработать процесс, по истечению лимита которого он будет перезапущен. Полезно для минимизации негативного эффекта от утечки памяти при использовании сторонних библиотек. Нулевое значение отключает перезапуск
<value name="environment">
<value name="HOSTNAME">$HOSTNAME</value>
<value name="PATH">/usr/local/bin:/usr/bin:/bin</value>
<value name="TMP">/tmp</value>
<value name="TMPDIR">/tmp</value>
<value name="TEMP">/tmp</value>
<value name="OSTYPE">$OSTYPE</value>
<value name="MACHTYPE">$MACHTYPE</value>
<value name="MALLOC_CHECK_">2</value>
</value>
Глобальные параметры
pid_file - pid файл. По умолчанию: то, что было указано при maleextra компилировании опцией --with-fpm-pid
error_log - файл журнала ошибок. По умолчанию: то, что было указано при компилировании опцией --with-fpm-log
log_level - уровень записываемых в журнал ошибок. По seo India умолчанию: "notice" (TODO: get list)
emergency_restart_threshold - при это числе рабочий процессов завершенных с SIGSEGV или SIGBUS... По умолчанию: 10
emergency_restart_interval - ...менее чем за этот промежуток instant performer времени, php-fpm будет мягко перезапущен. Это необходимо, чтобы исключить случайные повреждения памяти. По умолчанию: "1 минута"
process_control_timeout - время ожидания ответа от рабочий процессов. По умолчанию: "5 секунд"
daemonize - укажите "no" для отладки php-fpm или для его performer5 запуска в диспетчере (runit/sv, daemontools, upstart, etc.) По умолчанию: "yes"
Настройки пулов
Пул естественно может быть не один, а сколько вам потребуется. Это позволяет запускать их под разными системными пользователями, разными chroot'ами и т.д. Вообщем это дает определенною гибкость, так как позволяет в каждом пуле использовать свои собственные настройки под веб-приложение, которое будет его использовать. Улучшает безопасность, так как веб-приложения изолированы друг от друга и при компрометации одного приложения, остальные останутся в относительной безопасности. Кроме того это же и облегчает процесс обнаружения скомпрометированных веб-приложений.
В конфигурационном файле php-fpm.conf объявление 2-3 пулов будет выглядеть примерно так
<?xml version="1.0" ?>
<configuration>
<workers>
<section name="pool">
<value name="name">pool-1</value>
...
...
</section>
<section name="pool">
<value name="name">pool-2</value>
...
...
</section>
<section name="pool">
<value name="name">pool-3</value>
...
...
</section>
</workers>
</configuration>
Но так как PHP-FPM с PHP версий ниже 5.3.3 не поддерживает динамическое число дочерних процессов, то путем разнесения веб-приложений по свои отдельным php-fpm пулам, мы теряем по ресурсам. Связано это с тем что при static style pm кол-во процессов всегда одинаковое и если все процессы в одном пуле и ими пользуются все веб-приложения, то единовременно каждому приложению доступно на порядок большее число php-fpm процессов для обработки запросов, чем если бы у каждого приложения было по собственному персональному пулу.
name - имя пула, используется php-fpm'ом при ведении логов
listen_address - прослушиваемый адрес, здесь можно указать как сетевой адрес и порт, так и файловый сокет, например 127.0.0.1:9000 или tmp/php-fpm.sock, соответственно
owner - владелец, который будет назначен файловому сокету
group - группа, которая будет назначена файловому сокету
mode - права, которые будут выставлены на созданный файловый сокет
php_defines - описание настроек php, которые будут применены к данному пулу, перекрыв настройки указанные в /etc/php.ini. Например задание параметров max_execution_time и upload_max_filesize будет выглядеть вот так
<value name="php_defines">
<value name="max_execution_time">120</value>
<value name="upload_max_filesize">30</value>
</value>
user - системный пользователь из под которого будет работать процесс текущего пула
group - системная группа из под которой будет работать процесс текущего пула
style - задает стиль управления кол-вом рабочих процессов php-fpm. Возможные значения это static и apache-like (для PHP версии 5.2.17 с патчем PHP-FPM 0.5.14 - apache-like скорее всего работать не будет, с PHP версии 5.3.3 значение apache-like переименовано в dynamic и работает)
max_children - максимальное кол-во одновременно обрабатываемых запросов, т.е. кол-во процессов php-fpm которое будет запущено
startservers - кол-во создаваемых рабочих процессов php-fpm при запуске (применяется только при использовании apache-like для style)
minspareservers - минимальное кол-во рабочих процессов php-fpm (применяется только при использовании apache-like для style)
maxspareservers - максимальное кол-во рабочих процессов php-fpm (применяется только при использовании apache-like для style)
request_terminate_timeout - время в секундах на обслуживание одного запроса, по истечение которого рабочий процесс будет остановлен. Используется в том случае когда php параметру max_execution_time по каким либо причинам не удается остановить выполнение скрипта. Значение "0s" отключает использование этой функции.
request_slowlog_timeout - время в секундах для обработки одного запроса и при превышении которого данные о выполненном php скрипте будут сброшены в slow.log файл (аналог логирования медленных sql запросов Mysql сервера).
Значение "0s" отключает использование этой функции.
rlimit_files - устанавливает лимит дескрипторов открытых файлов rlimit
rlimit_core - устанавливает максимальное кол-во используемых ядер rlimit
chroot - директория chroot окружения при запуске. Путь должен быть абсолютным
chdir - изменяет текущую директория при запуске
catch_workers_output - перенаправление STDOUT и STDERR рабочего процесса в главный лог ошибок. Если не установлен, STDOUT и STDERR будут перенаправлены в /dev/null в соответствии со спецификацией FastCGI
max_requests - кол-во запросов которое может обработать процесс, по истечению лимита которого он будет перезапущен. Полезно для минимизации негативного эффекта от утечки памяти при использовании сторонних библиотек. Нулевое значение отключает перезапуск
allowed_clients - список IP адресов запросы с которых будут разрешены к обработке, IP адреса перечисляются через запятую. Нулевое значение снимает ограничение на доступ к php-fpm по IP адресу
Переменные окружения
Особо описывать нечего, ниже часть настроек по умолчанию из конфига php-fpm
<value name="HOSTNAME">$HOSTNAME</value>
<value name="PATH">/usr/local/bin:/usr/bin:/bin</value>
<value name="TMP">/tmp</value>
<value name="TMPDIR">/tmp</value>
<value name="TEMP">/tmp</value>
<value name="OSTYPE">$OSTYPE</value>
<value name="MACHTYPE">$MACHTYPE</value>
<value name="MALLOC_CHECK_">2</value>
</value>