PHP 8.4.2 Released!

Настройка

Менеджер процессов FPM использует синтаксис файла php.ini для своего файла конфигурации php-fpm.conf и файлов конфигурации пулов.

Список глобальных директив php-fpm.conf

pid string

Путь к PID-файлу. Значение по умолчанию: none.

error_log string

Путь к файлу журнала ошибок. Значение по умолчанию: #INSTALL_PREFIX#/log/php-fpm.log. Менеджер отправляет журнал в демон syslogd, а не в локальный файл, если установили значение "syslog".

log_level string

Уровень журналирования ошибок. Директива принимает значения: alert, error, warning, notice, debug. Значение по умолчанию: notice.

log_limit int

Устанавливает ограничение на длину строк журнала, которое разрешает регистрировать сообщения, длина которых превышает 1024 символа без переноса строк. Значение по умолчанию: 1024. Доступно с PHP 7.3.0.

log_buffering bool

Экспериментальное журналирование без дополнительной буферизации. Значение по умолчанию: yes. Доступно с PHP 7.3.0.

syslog.facility string

Указывает, какой тип программ будет логировать сообщения. Значение по умолчанию: daemon.

syslog.ident string

Добавляется перед каждым сообщением. Значение по умолчанию изменяют на то, которое удовлетворит общим требованиям, если на сервере работает больше одного экземпляра FPM. Значение по умолчанию: php-fpm.

emergency_restart_threshold int

FPM перезагрузится, если это количество дочерних процессов завершится с сигналом SIGSEGV или SIGBUS в течение интервала времени, который установили в директиве emergency_restart_interval. Значение 0 означает 'Off' — отключено. Значение по умолчанию: 0 (Off).

emergency_restart_interval mixed

Интервал времени, с которым будет работать директива emergency_restart_interval, чтобы определить, когда FPM-менеджер мягко перезагрузится. Это полезно для устранения случайных повреждений общей памяти ускорителя (accelerator). Доступные единицы измерения: s (секунды), m (минуты), h (часы) или d (дни). Единица измерения по умолчанию: секунды. Значение по умолчанию: 0 (Off).

process_control_timeout mixed

Время, в течение которого дочерние процессы ждут ответа на сигналы мастер-процессу. Доступные единицы измерения: s (секунды), m (минуты), h (часы) или d (дни). Единица измерения по умолчанию: секунды. Значение по умолчанию: 0.

process.max int

Максимальное количество процессов, которое породит FPM. Директиву разработали для контроля глобального количества процессов при работе с динамическим PM в большом количестве пулов. При работе с директивой соблюдают осторожность. Значение по умолчанию: 0.

process.priority int

Указывает приоритет (Unix nice(2)) мастер-процесса (только если установили). Принимает значения от -19, которое означает максимальный приоритет, до 20 — минимальный. Значение по умолчанию: нет.

daemonize bool

Запускает FPM в фоновом режиме. Установка значения 'no' запускает FPM в диспетчере для отладки. Значение по умолчанию: yes.

rlimit_files int

Устанавливает rlimit открытых файловых дескрипторов для мастер-процесса. Значение по умолчанию: значение, которое определила система.

rlimit_core int

Устанавливает rlimit максимального размера ядра для мастер-процесса. По умолчанию 0.

events.mechanism string

Указывает, какой событийный механизм будет использовать FPM. Доступны значения: select, pool, epoll, kqueue (*BSD), port (Solaris). Значение по умолчанию: нет, работает автоопределение.

systemd_interval int

Указывает интервал, в секундах, между оповещениями systemd о своём состоянии, если FPM собрали с интеграцией с systemd. Значение 0 отключает оповещения. Значение по умолчанию: 10.

Список директив для пулов.

Через FPM запускают набор пулов процессов с разными настройками. Эти параметры разрешается передавать пулу.

listen string

Адрес, который будет принимать FastCGI-запросы. Синтаксис: 'ip.add.re.ss:port', 'port', '/path/to/unix/socket'. Опция обязательна для каждого пула.

listen.backlog int

Устанавливает listen(2) backlog. Значение -1 означает максимум на системах BSD. Значение по умолчанию: -1 (FreeBSD или OpenBSD) или 511. (Linux и другие платформы).

listen.allowed_clients string

Список IPv4- или IPv6-адресов клиентов FastCGI, которым разрешается подключение. Эквивалент переменной окружения FCGI_WEB_SERVER_ADDRS в оригинальном PHP FastCGI (5.2.2+). Смысл в установке директивы появляется только с TCP-сокетом прослушивания. Каждый адрес разделяют запятой. Соединения будут приниматься с любого IP-адреса, если оставить значение пустым. Значение по умолчанию: нет, принимается любой IP-адрес.

listen.owner string

Устанавливает разрешения для Unix-сокета, если подключение установили через Unix-сокет. В Linux для разрешения соединений к веб-серверу устанавливают права на чтение и запись. Часто системы на основе BSD разрешают соединения независимо от прав доступа. Значение по умолчанию: пользователь и группа задаются как пользователь, от имени которого запускается сервер, для режима устанавливаются разрешения 0660.

listen.group string

Смотрите listen.owner.

listen.mode string

Смотрите listen.owner.

listen.acl_users string

Опция настраивает список управления доступом (ACL) POSIX, если список поддерживается. Директивы listen.owner и listen.group проигнорируются, если директиву установили. Значение задаётся списком имён через запятую.

listen.acl_groups string

Смотрите описание директивы listen.acl_users. Значение задаётся списком имён групп через запятую.

user string

Unix-пользователь FPM-процессов. Параметр обязателен.

group string

Unix-группа FPM-процессов. Группа по умолчанию равна имени пользователя, если директиву не установили.

pm string

Выбор того, как менеджер процессов будет контролировать создание дочерних процессов. Возможные значения: static, ondemand, dynamic. Параметр обязателен.

static — фиксированное число дочерних процессов (pm.max_children).

ondemand — число процессов, которые порождаются по требованию (когда появляются запросы, в отличие от опции dynamic, когда стартует конкретное количество процессов, равное pm.start_servers, вместе с запуском службы).

dynamic — количество дочерних процессов, которое изменяется динамически, задаётся на основе следующих директив: pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers.

pm.max_children int

Число дочерних процессов, которые создадутся, когда pm установили в режим static, или максимальное количество процессов, которые создадутся, когда pm установили в режим dynamic. Параметр обязателен.

Параметр устанавливает ограничение на число одновременных запросов, которое обслужит менеджер. Эквивалент директивы ApacheMaxClients с модулем mpm_prefork и переменной окружения PHP_FCGI_CHILDREN в оригинальном FastCGI-интерфейсе PHP.

pm.start_servers int

Количество дочерних процессов, которое менеджер создаёт при запуске. Директива работает, только когда для параметра pm установили значение dynamic. Значение по умолчанию: (min_spare_servers + max_spare_servers) / 2.

pm.min_spare_servers int

Минимальное число неактивных процессов сервера. Директива работает, только когда для параметра pm установили значение dynamic. В таких случаях параметр становится обязательным.

pm.max_spare_servers int

Максимальное число неактивных процессов сервера. Директива работает, только когда для параметра pm установили значение dynamic. В таких случаях параметр становится обязательным.

pm.max_spawn_rate int

Количество одновременных порождений дочерних процессов. Директива работает, только когда для параметра pm установили значение dynamic. Значение по умолчанию: 32

pm.process_idle_timeout mixed

Количество секунд, по истечении которых процесс, который простаивает, завершится. Директива работает, только когда для параметра pm установили значение ondemand. Допустимые единицы: s (секунды) (значение по умолчанию), m (минуты), h (часы) или d (дни). Значение по умолчанию: 10s.

pm.max_requests int

Число запросов дочернего процесса, после которого процесс перезапустится. Это полезно для устранения утечек памяти при работе со сторонними библиотеками. Для бесконечной обработки запросов устанавливают значение '0'. Эквивалент PHP_FCGI_MAX_REQUESTS. Значение по умолчанию: 0.

pm.status_listen string

Адрес, по которому менеджер примет запрос состояния FastCGI-интерфейса. Директива создаёт новый невидимый пул, который умеет обрабатывать запросы независимо. Это полезно, когда основной пул занят запросами, которые долго выполняются, поскольку страница состояния FPM по-прежнему доступна для получения до завершения длительных запросов. Синтаксис значений директивы аналогичен синтаксису директивы listen. Значение по умолчанию: none.

pm.status_path string

URI-идентификатор для просмотра страницы состояния FPM-менеджера. Значение начинается со слеша /. URI не распознается как страница состояния, если значение директивы не установили. Значение по умолчанию: none.

ping.path string

Ссылка на ping-страницу FPM-мониторинга. Ping-страница отображаться не будет, если значение не установили. Директивой пользуются для тестирования из внешнего мира, чтобы убедиться, что FPM жив и отвечает. Обратите внимание, что значение начинается со слеша /.

ping.response string

Директивой настраивают ответ на ping-запрос. Ответ формируется как text/plain с кодом ответа 200. Значение по умолчанию: pong.

process.priority int

Устанавливает приоритет nice(2), который применяется к рабочему процессу, только если процесс установили. Директива принимает значения от -19 для высшего приоритета до 20 для самого низкого. Значение по умолчанию: нет.

process.dumpable bool

Устанавливает флаг процесса dumpable (PR_SET_DUMPABLE prctl), даже если пользователь процесса или группа отличается от пользователя мастер-процесса. Это разрешает создавать дамп ядра процесса и выполнять ptrace процесса для пользователя пула. Значение по умолчанию: no. Директива доступна с PHP 7.0.29, 7.1.17 и 7.2.5.

prefix string

Задаёт префикс для вычисления пути

request_terminate_timeout mixed

Время ожидания обслуживания одного запроса, после которого рабочий процесс завершится. Опцию задействуют, когда опция 'max_execution_time' в файле php.ini не останавливает выполнение скрипта по каким-то причинам. Значение '0' означает «выключено». Доступные единицы измерения: s (секунды), m (минуты), h (часы) или d (дни). Значение по умолчанию: 0.

request_terminate_timeout_track_finished bool

Время ожидания, которое установили в директиве request_terminate_timeout, не включается после сброса данных ответа клиенту функцией fastcgi_finish_request или когда приложение завершилось и вызываются внутренние функции завершения работы. Директива разрешает безоговорочно применять ограничение времени ожидания даже в таких случаях. Значение по умолчанию: нет, начиная с версии PHP 7.3.0.

request_slowlog_timeout mixed

Время ожидания для обслуживания одного запроса, после которого обратная трассировка PHP сохранится в файл 'slowlog'. Значение '0' означает «выключено». Доступные единицы измерения: s (секунды), m (минуты), h (часы) или d (дни). Значение по умолчанию: 0.

request_slowlog_trace_depth int

Глубина трассировки стека журнала slowlog. Значение по умолчанию: 20 с PHP 7.2.0.

slowlog string

Файл журнала для медленных запросов. Значение по умолчанию: #INSTALL_PREFIX#/log/php-fpm.log.slow.

rlimit_files int

Устанавливает лимит дескрипторов открытых файлов rlimit для дочерних процессов в этом пуле. Значение по умолчанию: определяется значением системы.

rlimit_core int

Устанавливает максимальное количество ядер rlimit для дочерних процессов в этом пуле. Возможные значения: 'unlimited' или целое число, которое больше или равно 0. Значение по умолчанию: определяется значением системы.

chroot string

Директория chroot окружения при старте. Значение определяют как абсолютный путь. Каталог chroot не используется, если значение не установили.

chdir string

Chdir изменяет текущую директорию при старте. Значение определяют как абсолютный путь. Значение по умолчанию: текущая директория или / при работе с chroot.

catch_workers_output bool

Перенаправление стандартных потоков STDOUT и STDERR рабочего процесса в главный лог ошибок. Потоки STDOUT и STDERR перенаправятся в файл /dev/null по правилам спецификаций FastCGI, если директиву не установили. Значение по умолчанию: no.

decorate_workers_output bool

Включает оформление вывода для вывода рабочих процессов при включённой опции catch_workers_output. Значение по умолчанию: yes. Директива доступна с PHP 7.3.0.

clear_env bool

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

security.limit_extensions string

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

apparmor_hat string

Директива разрешает «менять шляпу» (использовать другой контекст безопасности), если программу защиты AppArmor включили. Значение по умолчанию: нет.

access.log string

Файл журнала доступа. Значение по умолчанию: нет.

access.format string

Формат файла журнала доступа. Значение по умолчанию: "%R - %u %t \"%m %r\" %s":

Допустимые значения
Заполнитель Описание
%% Символ %
%C %ЦП, с которым работал запрос. Опция принимает следующие форматы: %{user}C — только ЦП пользователя, %{system}C — только ЦП системы, %{total}C — ЦП пользователя + системы (формат по умолчанию)
%d Время, которое потребовалось для обслуживания запроса. Опция принимает следующие форматы точности: %{seconds}d — секунды (значение по умолчанию), %{milliseconds}d — миллисекунды, %{microseconds}d — микросекунды
%{name}e Переменная FastCGI-окружения, по аналогии с переменными $_ENV или $_SERVER). Имя переменной указывают в фигурных скобках, чтобы указать название переменной окружения. Например, характерные для сервера названия переменных наподобие %{REQUEST_METHOD}e или %{SERVER_PROTOCOL}e, HTTP-заголовки наподобие %{HTTP_HOST}e или %{HTTP_USER_AGENT}e
%f Название файла скрипта
%l Заголовок запроса Content-Length; только для POST-запроса по HTTP-протоколу
%m HTTP-метод запроса
%M Пик памяти, которую выделил PHP. Параметр принимает следующие форматы: %{bytes}M — байты (формат по умолчанию), %{kilobytes}M или %{kilo}M — килобайты, %{megabytes}M или %{mega}M — мегабайты
%n Название пула
%{name}o Заголовок вывода. Название заголовка указывают внутри фигурных скобок. Например: %{Content-Type}o, %{X-Powered-By}o , %{Transfer-Encoding}o
%p PID-идентификатор дочернего процесса, в котором обслуживался запрос
%P PID-идентификатор родителя дочернего процесса, в котором обслуживался запрос
%q Строка с аргументами запроса
%Q Символ склеивания '?' между строкой с аргументами запроса %q и URI-идентификатором запроса %r, если URL-адрес содержал строку запроса
%r URI-идентификатор запроса без аргументов запроса, смотрите описание опций %q и %Q
%R Удалённый IP-адрес
%s Код статуса ответа
%t Серверное время получения запроса. Аргумент принимает строку формата даты и времени в стиле библиотечной C-функции strftime(3): %d/%b/%Y:%H:%M:%S %z — значение по умолчанию. Строку формата в стиле функции strftime(3) потребуется инкапсулировать в тег %{<strftime_format>}t, например, для форматирования строки времени по стандарту ISO8601: %{%Y-%m-%dT%H:%M:%S%z}t
%T Время записи в журнал, когда запрос завершился. Аргумент принимает строку формата даты и времени в стиле библиотечной C-функции strftime(3): %d/%b/%Y:%H:%M:%S %z — значение по умолчанию. Строку формата в стиле функции strftime(3) потребуется инкапсулировать в тег %{<strftime_format>}t, например, для форматирования строки времени по стандарту ISO8601: %{%Y-%m-%dT%H:%M:%S%z}t
%u Базовая аутентификация пользовательского доступа, если указали в Authorization заголовке

Передача дополнительных переменных окружения обновляет настройки PHP для конкретного пула. Для этого добавляют следующие параметры в файл настройки пула.

Пример #1 Передача переменных окружения и PHP-настроек пулу

env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com
php_flag[display_errors] = off
php_admin_value[error_log] = /var/log/fpm-php.www.log
php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 32M
Настройки PHP, которые передали через FPM-директивы php_value или php_flag, перезапишут своё предыдущее значение. Обратите внимание, что определения disable_functions или disable_classes не перезапишут значения, которые прежде определили в файле php.ini, а добавят новые значения.

Настройки, которые определили через FPM-директивы php_admin_value и php_admin_flag, невозможно перезаписать функцией ini_set().

Настройки PHP разрешается устанавливать в конфигурации веб-сервера.

Пример #2 Установка PHP-настроек в файле nginx.conf

set $php_value "pcre.backtrack_limit=424242";
set $php_value "$php_value \n pcre.recursion_limit=99999";
fastcgi_param  PHP_VALUE $php_value;

fastcgi_param  PHP_ADMIN_VALUE "open_basedir=/var/www/htdocs";
Предостережение

Поскольку эти настройки передаются в php-fpm как FastCGI-заголовки, php-fpm не привязывают к адресу, который доступен из внешнего мира, иначе кто угодно изменит настройки PHP. Смотрите также описание директивы listen.allowed_clients.

Замечание: Пулы — не механизм безопасности, поскольку не обеспечивают полного разделения; например пулы будут использовать один экземпляр OPcache.

Добавить

Примечания пользователей 9 notes

up
19
ikrabbe
6 years ago
It seems there is no way to get informed about the access log format codes that are used or can be used. All I found is the source code.

It would really help, not to have open questions when deploying php-fpm. I constantly struggle with file paths for example, but that is another topic.

case '%': /* '%' */
case 'C': /* %CPU */
case 'd': /* duration µs */
case 'e': /* fastcgi env */
case 'f': /* script */
case 'l': /* content length */
case 'm': /* method */
case 'M': /* memory */
case 'n': /* pool name */
case 'o': /* header output */
case 'p': /* PID */
case 'P': /* PID */
case 'q': /* query_string */
case 'Q': /* '?' */
case 'r': /* request URI */
case 'R': /* remote IP address */
case 's': /* status */
case 'T':
case 't': /* time */
case 'u': /* remote user */
up
11
rob at librobert dot net
3 years ago
The 'include' directive that is used in php-fpm.conf is not documented here. However, this directive can also be used in the pool configurations. In the included file, the $pool variable is substituted correctly.

This means that, if you have multiple pools with similar configurations, you can create a file 'default-values.inc' like so:

-----
listen.allowed_clients = 127.0.0.1

pm = dynamic
pm.max_children = X
pm.min_spare_servers = X
pm.max_spare_servers = X

access.log = /var/log/php-fpm/$pool.access
access.format = "%R %u [%t] \"%m %r\" %s %d %l"
slowlog = /var/log/php-fpm/$pool.slow

php_flag[short_open_tag] = off
-----

And then include that file in each pool configuration like so:

-----
[vhost1.example.com]
user = www-vhost1
group = www-vhost1

listen = 127.0.0.1:9001

include = /usr/local/etc/php-fpm.d/default-values.inc
-----

This makes things a bit more transparent, and it could potentially save some time if you decide to change settings.

Make sure the name of the included file does not end in '.conf', because all files with that extension are loaded from php-fpm.conf.
up
14
gadnet at aqueos dot com
10 years ago
the doc is lacking a lot of things it seems.

The php fpm exemple config file indicate different thing, more option etc... I wonder why the main documentation is less verbose that the configuration file that user can have .. or not have ?
up
9
Frank DENIS
13 years ago
The default value for listen.backlog isn't exactly "unlimited".

It's 128 on some operating systems, and -1 (which doesn't mean "unlimited" as well, but is an alias to a hard limit) on other systems.

Check for a sysctl value like kern.somaxconn (OpenBSD) or net.core.somaxconn (Linux).

Crank it up if you need more PHP workers than the default value. Then adjust listen.backlog in your php-fpm configuration file to the same value.

-Frank.
up
2
antonfedonyuk at gmail dot com
3 years ago
NOTE: "access.format" containing "%o" generate error in PHP 7.4 (don't tested in other versions)
up
5
antonfedonyuk at gmail dot com
3 years ago
; The access log format.
; The following syntax is allowed
; %%: the '%' character
; %C: %CPU used by the request
; it can accept the following format:
; - %{user}C for user CPU only
; - %{system}C for system CPU only
; - %{total}C for user + system CPU (default)
; %d: time taken to serve the request
; it can accept the following format:
; - %{seconds}d (default)
; - %{milliseconds}d
; - %{milli}d
; - %{microseconds}d
; - %{micro}d
; %e: an environment variable (same as $_ENV or $_SERVER)
; it must be associated with embraces to specify the name of the env
; variable. Some examples:
; - server specifics like: %{REQUEST_METHOD}e or %{SERVER_PROTOCOL}e
; - HTTP headers like: %{HTTP_HOST}e or %{HTTP_USER_AGENT}e
; %f: script filename
; %l: content-length of the request (for POST request only)
; %m: request method
; %M: peak of memory allocated by PHP
; it can accept the following format:
; - %{bytes}M (default)
; - %{kilobytes}M
; - %{kilo}M
; - %{megabytes}M
; - %{mega}M
; %n: pool name
; %o: output header
; it must be associated with embraces to specify the name of the header:
; - %{Content-Type}o
; - %{X-Powered-By}o
; - %{Transfert-Encoding}o
; - ....
; %p: PID of the child that serviced the request
; %P: PID of the parent of the child that serviced the request
; %q: the query string
; %Q: the '?' character if query string exists
; %r: the request URI (without the query string, see %q and %Q)
; %R: remote IP address
; %s: status (response code)
; %t: server time the request was received
; it can accept a strftime(3) format:
; %d/%b/%Y:%H:%M:%S %z (default)
; The strftime(3) format must be encapsulated in a %{<strftime_format>}t tag
; e.g. for a ISO8601 formatted timestring, use: %{%Y-%m-%dT%H:%M:%S%z}t
; %T: time the log has been written (the request has finished)
; it can accept a strftime(3) format:
; %d/%b/%Y:%H:%M:%S %z (default)
; The strftime(3) format must be encapsulated in a %{<strftime_format>}t tag
; e.g. for a ISO8601 formatted timestring, use: %{%Y-%m-%dT%H:%M:%S%z}t
; %u: remote user
;
; Default: "%R - %u %t \"%m %r\" %s"
access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{milli}d %{kilo}M %C%%"

https://github.com/php/php-src/blob/master/sapi/fpm/www.conf.in#L257-L318
up
6
frederic at juliana-multimedia dot com
6 years ago
With Apache, mod_proxy_fcgi and php-fpm, if you want to have a generic pool and several vhost with different php configuration, you can use the ProxyFCGISetEnvIf directive and the PHP_ADMIN_VALUE environment variable. It does not work with PHP_ADMIN_FLAG even for boolean directives.

PHP directives must be separated by spaces and a \n.

ProxyFCGISetEnvIf "true" PHP_ADMIN_VALUE "open_basedir=/var/www/toto/:/tmp/ \n session.save_path=/var/www/toto/session \n display_errors=On \n error_reporting=-1"
up
3
jon dot phpnetdonotspam at langevin dot me
2 years ago
PHP-FPM configuration page apparently doesn't see the need to specify what options are available with each version of PHP.

It claims that pm.status_listen is a valid directive, but that directive only exists as of php 8.0.0, which is a bummer for those of us still using PHP 7.4.

Noting this for anyone else fighting with this.
up
2
david dot cancalon at proxeem dot fr
4 years ago
Be very carrefull when using ProxyFCGISetEnvIf within a Apache virtual host configuration using a shared PHP-FPM pool. Values defined like this are shared across all the Apache virtual hosts within a pool worker, may resulting in strange behaviours depending on the requests chronology.

See full explanation here:
https://serverfault.com/questions/817020/stop-reusing-php-value-for-different-sites-with-php-fpm/817905#817905
To Top