Statement on glibc/iconv Vulnerability

Página de estado

Esta página proporciona información sobre la configuración y el contenido de la página de estado de FPM. Véase también fpm_get_status().

Configuración

La página de estado de FPM se puede habilitar estableciendo el parámetro de configuración pm.status_path en la configuración del pool de FPM.

Precaución

Por seguridad, la página de estado del FPM debería estar restringida a las solicitudes internas o a las IPs de clientes conocidos, ya que la página revela las URLs de las solicitudes y la información sobre los recursos disponibles.

Dependiendo de la configuración del servidor web, podría ser necesario configurar el servidor web para permitir peticiones directamente a esta ruta, evitando cualquier script PHP. Un ejemplo de configuración para Apache con FPM escuchando en UDS y pm.status_path establecido a /fpm-status se vería así:

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

Después de recargar o reiniciar tanto el FPM como el servidor web, la página de estado será accesible desde el navegador (siempre que la petición provenga de una dirección IP permitida si se ha configurado la restricción de IP).

Parámetros de consulta

El formato de la salida de la página de estado puede modificarse especificando uno de los siguientes parámetros de consulta:

  • html
  • json
  • openmetrics
  • xml

También se puede devolver información adicional utilizando el parámetro de consulta completa full.

Ejemplo de URL de la página de estado:

  • https://localhost/fpm-status - Salida breve en el formato de texto por defecto
  • https://localhost/fpm-status?full - Salida completa en el formato de texto por defecto
  • https://localhost/fpm-status?json - Breve salida en formato JSON
  • https://localhost/fpm-status?html&full - Salida completa en formato HTML

Información mostrada

Los valores de fecha/hora utilizan el formato unix timestamp en la salida JSON y XML, de lo contrario utilizan el formato que da como resultado la siguiente fecha de ejemplo "03/Jun/2021:07:21:46 +0100".

Información básica - Siempre se muestra en la página de estado
Parámetro Descripción
pool El nombre del conjunto de procesos FPM.
proccess manager El tipo de gestor de procesos: estático, dinámico o a la carta.
start time La fecha/hora en que se inició por última vez el conjunto de procesos.
start since El tiempo en segundos desde que el conjunto de procesos se inició por última vez.
accepted conn El número total de conexiones aceptadas.
listen queue El número de solicitudes (backlog) en espera de un proceso libre.
max listen queue El número máximo de solicitudes vistas en la cola de escucha en un momento dado.
listen queue len El tamaño máximo permitido de la cola de escucha.
idle processes El número de procesos que están actualmente inactivos (esperando peticiones).
active processes El número de procesos que están procesando actualmente las solicitudes.
total processes El número total actual de procesos.
max active processes El número máximo de procesos activos simultáneamente.
max children reached ¿Se ha alcanzado el número máximo de procesos? Si es así, el valor mostrado es 1 de lo contrario el valor es 0.
slow requests El número total de peticiones que han alcanzado el valor configurado en request_slowlog_timeout.
Información por proceso: - sólo se muestra en el modo full de salida completa
Parámetro Descripción
pid El PID del sistema del proceso.
state El estado del proceso: inactivo, en ejecución, ...
start time La fecha/hora en que se inició el proceso.
start since El número de segundos desde que se inició el proceso.
requests El número total de solicitudes servidas.
request duration El tiempo total en segundos dedicado a servir peticiones.
request method El método HTTP de la última solicitud servida.
request uri El URI de la última solicitud servida (después del procesamiento del servidor web, puede ser siempre /index.php si se utiliza un patrón de redirección del controlador frontal (front controller).
content length La longitud del cuerpo de la solicitud, en bytes, de la última solicitud.
user El usuario HTTP (PHP_AUTH_USER) de la última petición.
script La ruta completa del script ejecutado por la última petición. Será '-' si no se aplica (por ejemplo, solicitudes de páginas de estado).
last request cpu El %cpu de la última petición.Será 0 si el proceso no está inactivo, ya que el cálculo se realiza cuando se completa el procesamiento de la solicitud
last request memory La cantidad máxima de memoria consumida por la última petición. Será 0 si el proceso no está inactivo, ya que el cálculo se realiza cuando se completa el procesamiento de la solicitud.

Nota:

Todos los valores son específicos del pool y se restablecen cuando se reinicia FPM.

Nota:

La salida del formato OpenMetrics utiliza diferentes tipos de parámetros para adaptarse mejor al formato OpenMetrics. Los parámetros y las descripciones de sus valores se incluyen en la salida del formato OpenMetrics.

Historial de cambios

Versión Descripción
8.1.0 Se ha añadido el formato 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
25 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