Statement on glibc/iconv Vulnerability

Страница состояния

На этой странице представлена информация о настройке и содержании страницы состояния менеджера процессов FPM. Смотрите также описание функции fpm_get_status().

Настройка

Страницу состояния FPM включают установкой параметра конфигурации pm.status_path в конфигурации пула FPM.

Предостережение

В целях безопасности страницу состояния FPM ограничивают внутренними запросами или известными IP-адресами клиентов, поскольку страница показывает URL-адрес запроса и информацию о доступных ресурсах.

От конфигурации веб-сервера зависит, нужно ли в настройках сервера разрешать запросы непосредственно к этому пути, минуя любые PHP-скрипты. Пример конфигурации для сервера Apache с менеджером процессов FPM, слушающим на UDS, и директивой pm.status_path с установленным значением /fpm-status будет выглядеть следующим образом:

<LocationMatch "/fpm-status">
 Order Allow,Deny
 Allow from 127.0.0.1
 ProxyPass "unix:/var/run/php-fpm.sock|fcgi://localhost/fpm-status"
</LocationMatch>

После перезагрузки или перезапуска менеджера FPM и веб-сервера страница состояния будет доступна из браузера (при условии, что запрос поступает с разрешённого IP-адреса, если было настроено ограничение IP-адресов).

Параметры запроса

Формат вывода страницы состояния изменяют путём указания одного из следующих параметров запроса:

  • html
  • json
  • openmetrics
  • xml

Дополнительная информация также возвращается с параметром запроса full.

Примеры URL-адресов страниц состояния:

  • https://localhost/fpm-status — Краткий вывод в текстовом формате по умолчанию
  • https://localhost/fpm-status?full — Полный вывод в текстовом формате по умолчанию
  • https://localhost/fpm-status?json — Краткий вывод в формате JSON
  • https://localhost/fpm-status?html&full — Полный вывод в формате HTML

Отображаемая информация

В данных вывода в форматах JSON и XML значения даты и времени выводятся в формате метки времени UNIX, иначе они выводятся в формате, который даёт следующий пример даты: "03/Jun/2021:07:21:46 +0100".

Основная информация — каждый раз отображается на странице состояния
Параметр Описание
pool Имя пула процессов FPM.
proccess manager Тип менеджера процесса — static (статический), dynamic (динамический) или ondemand (по требованию).
start time Дата и время последнего запуска пула процессов.
start since Время в секундах с момента последнего запуска пула процессов.
accepted conn Общее количество принятых соединений.
listen queue Количество запросов (backlog), ожидающих свободного процесса.
max listen queue Максимальное количество запросов в очереди на прослушивание в любой момент времени.
listen queue len Максимально допустимый размер очереди прослушивания.
idle processes Количество процессов, которые в настоящее время простаивают (ожидают запросов).
active processes Количество процессов, которые в настоящее время обрабатывают запросы.
total processes Текущее общее количество процессов.
max active processes Максимальное количество одновременно активных процессов.
max children reached Было ли достигнуто максимальное количество процессов? Если да, то отображаемое значение будет больше или равно 1, иначе значение будет равно 0.
slow requests Общее количество запросов, которые достигли настроенного request_slowlog_timeout.
Информация о каждом процессе — отображается только в режиме вывода full
Параметр Описание
pid Системный PID-идентификатор процесса.
state Состояние процесса — Idle, Running, …
start time Дата и время начала процесса.
start since Количество секунд с момента начала процесса.
requests Общее количество обслуженных запросов.
request duration Общее время в микросекундах, затраченное на обслуживание последнего запроса.
request method Метод HTTP последнего обслуженного запроса.
request uri URI-идентификатор последнего обслуженного запроса (после обработки веб-сервером он всегда может быть равен /index.php, если вы используете шаблонный редирект фронт-контроллера).
content length Длина тела запроса, в байтах, последнего запроса.
user HTTP-пользователь (PHP_AUTH_USER) последнего запроса.
script Полный путь к скрипту, который выполнил последний запрос. Это будет '-', если не применимо (например, запросы страницы состояния).
last request cpu Процент занятого центральным процессором времени при выполнении последнего запроса. Это значение будет равно 0, если процесс не в состоянии Idle, потому что вычисление проводится после окончания обработки запроса. Значение может превысить 100 %, потому что метрика покажет, какой процент от общего времени работы процессора занял последний запрос, — в расчёте менеджер учтёт процессы на каждом ядре, тогда как 100 % — это значение только для одного ядра.
last request memory Максимальный объем памяти, который потребил последний запрос. Это значение будет равно 0, если процесс не простаивает, поскольку вычисление проводится после окончания обработки запроса.

Замечание:

Все значения специфичны для пула и сбрасываются при перезапуске менеджера FPM.

Замечание:

Данные вывода в формате стандарта OpenMetrics используют различные типы параметров, чтобы лучше соответствовать формату OpenMetrics. Параметры и описания их значений включаются в данные вывода формата OpenMetrics.

Список изменений

Версия Описание
8.1.0 Добавлен формат OpenMetrics.
add a note

User Contributed Notes 4 notes

up
16
uwe at ohse dot de
1 year ago
Before someone else misunderstands that:
"request duration The total time in seconds spent serving requests."

This is not the total time of all requests done by that process, but either the time used by the last request done (idle state), or the current request (all other states).

And the number given is not in seconds, but in microseconds.

The fpm status documentation is a mess.
up
1
Anonymous
7 months ago
there is an error in the docs, if you want to use with fastcgi, the correct link in ProxyPass is not

ProxyPass "unix:/var/run/php-fpm.sock|fcgi://localhost/fpm-status"

but only

ProxyPass "unix:/var/run/php-fpm.sock|fcgi://localhost"

otherwise the page says "File not found"
up
1
Mark Gooderum
2 months ago
Anonymous is correct.

So the URI has to match the pm.status_path in the pool configuration and in turn the Apache Location configuration. The same applies to ping.path.

Ergo If you want multiple PHP FPMs exposed on the same Apache each needs their own unique path. Also from experience Apache 8 FPM status_listen doesn't seem to work with the domain socket, only TCP. Obviously for 8.x you'll need unique port numbers for each PHP FPM and they need to match between the pm.status_listen and the Apache ProxyPass line.

So imagine I want FPM status and ping exposed for 7.4 and 8.2.

I then have an Apache config like:

<LocationMatch "/fpm-ping-74">
Order Deny,Allow
Require local
ProxyPass "unix:/run/php/php7.4-fpm.sock|fcgi://localhost"
</LocationMatch>
<LocationMatch "/fpm-status-74">
Order Deny,Allow
Require local
IncludeOptional trusted-ips.conf
ProxyPass "unix:/run/php/php7.4-fpm.sock|fcgi://localhost"
</LocationMatch>

<LocationMatch "/fpm-ping-82">
Order Deny,Allow
Require local
IncludeOptional trusted-ips.conf
ProxyPass "unix:/run/php/php8.2-fpm.sock|fcgi://localhost:9002"
</LocationMatch>
<LocationMatch "/fpm-status-82">
Order Deny,Allow
Require local
ProxyPass "unix:/run/php/php8.2-fpm.sock|fcgi://localhost:9002"
</LocationMatch>

Then in the respective pool config files:

7.4/fpm/pool.d/www.conf:

; status_listen default works in 7.4
pm.status_path = /fpm-status-74
ping.path = /fpm-ping-74

8.2/fpm/pool.d/www.conf:

; Need an explicit TCP listen in 8.x - why?
pm.status_listen = 127.0.0.1:9002
pm.status_path = /fpm-status-82
ping.path = /fpm-ping-82
up
0
ninsuo
24 days ago
For caddy 2, you may use the following configuration:

http://localhost {
root * /var/www/public

reverse_proxy /status php_fpm:9000 {
transport fastcgi {
env SCRIPT_NAME /status
}
}

encode gzip zstd

php_fastcgi php_fpm:9000
file_server
}

Replace php_fpm:9000 by the host/port of your php fpm or the path of your unix// socket.
To Top