PHP 8.5.0 Beta 3 available for testing

Configuración

FPM utiliza la sintaxis de php.ini para su archivo de configuración - php-fpm.conf, y archivos de configuración de grupos.

Lista de directivas globales de php-fpm.conf

pid string

Ruta al archivo PID. Valor por defecto: ninguno.

error_log string

Ruta al archivo de registro de errores. Valor por defecto: #INSTALL_PREFIX#/log/php-fpm.log. Si se establece en "syslog", el registro se envía a syslogd en lugar de escribirse en un archivo local.

log_level string

Nivel de registro de errores. Valores posibles: alert, error, warning, notice, debug. Valor por defecto: notice.

log_limit int

Límite de registro para las líneas registradas que permite registrar mensajes más largos que 1024 caracteres sin envolver. Valor por defecto: 1024. Disponible a partir de PHP 7.3.0.

log_buffering bool

Registro experimental sin búfer adicional. Valor por defecto: yes. Disponible a partir de PHP 7.3.0.

syslog.facility string

usado para especificar qué tipo de programa está registrando el mensaje. Valor por defecto: daemon.

syslog.ident string

Precede a cada mensaje. Si tiene múltiples instancias de FPM ejecutándose en el mismo servidor, puede cambiar el valor por defecto que debe adaptarse a las necesidades comunes. Valor por defecto: php-fpm.

emergency_restart_threshold int

Si este número de procesos hijos salen con SIGSEGV o SIGBUS dentro del intervalo de tiempo establecido por emergency_restart_interval, entonces FPM se reiniciará. Un valor de 0 significa 'Desactivado'. Valor por defecto: 0 (Desactivado).

emergency_restart_interval mixed

Intervalo de tiempo utilizado por emergency_restart_interval para determinar cuándo se iniciará un reinicio sin interrupción. Esto puede ser útil para trabajar alrededor de corrupciones accidentales en la memoria compartida de un acelerador. Unidades disponibles: s(econdos), m(inutos), h(oras), o d(ías). Unidad por defecto: segundos. Valor por defecto: 0 (Desactivado).

process_control_timeout mixed

Límite de tiempo para que los procesos hijos esperen una reacción a las señales del proceso principal. Unidades disponibles: s(econdos), m(inutos), h(oras), o d(ías) Unidad por defecto: segundos. Valor por defecto: 0.

process.max int

El número máximo de procesos que FPM generará. Esto ha sido diseñado para controlar el número global de procesos cuando se utiliza PM dinámico dentro de muchos grupos. Úselo con precaución. Valor por defecto: 0.

process.priority int

Especifica la prioridad nice(2) a aplicar al proceso principal (solo si está establecido). El valor puede variar de -19 (prioridad más alta) a 20 (prioridad más baja). Valor por defecto: no establecido.

daemonize bool

Enviar FPM al fondo. Establecer en 'no' para mantener FPM en primer plano para depuración. Valor por defecto: yes.

rlimit_files int

Establecer el límite de descriptores de archivo abiertos para el proceso principal. Valor por defecto: valor definido por el sistema.

rlimit_core int

Establecer el límite máximo de tamaño de núcleo para el proceso principal. Valor por defecto: 0.

events.mechanism string

Especifica el mecanismo de eventos que FPM utilizará. Lo siguiente está disponible: epoll, kqueue (*BSD), port (Solaris), poll, select. Valor por defecto: no establecido (detección automática prefiriendo epoll y kqueue).

systemd_interval int

Cuando FPM se construye con integración de systemd, especificar el intervalo, en segundos, entre las notificaciones de informe de salud a systemd. Establecer en 0 para desactivar. Valor por defecto: 10.

Lista de directivas de grupo

Con FPM puede ejecutar varios grupos de procesos con diferentes configuraciones. Estas son las configuraciones que se pueden ajustar por grupo.

listen string

La dirección en la que aceptar solicitudes FastCGI. Sintaxis válidas son: 'ip.add.re.ss:port', 'port', '/path/to/unix/socket'. Esta opción es obligatoria para cada grupo.

listen.backlog int

Establecer listen(2) backlog. Un valor de -1 significa máximo en sistemas BSD. Valor por defecto: -1 (FreeBSD o OpenBSD) o 511 (Linux y otras plataformas).

listen.allowed_clients string

Lista de direcciones IPv4 o IPv6 de clientes FastCGI que están autorizados a conectarse. Equivalente a la variable de entorno FCGI_WEB_SERVER_ADDRS en el PHP FastCGI original (5.2.2+). Solo tiene sentido con un socket de escucha tcp. Cada dirección debe estar separada por una coma. Si este valor se deja en blanco, se aceptarán conexiones desde cualquier dirección ip. Valor por defecto: no establecido (se acepta cualquier dirección ip).

listen.owner string

Establecer permisos para el socket unix, si se utiliza uno. En Linux, los permisos de lectura/escritura deben establecerse para permitir conexiones desde un servidor web. Muchos sistemas derivados de BSD permiten conexiones independientemente de los permisos. Valores por defecto: usuario y grupo se establecen como el usuario en ejecución, modo se establece en 0660.

listen.group string

Ver listen.owner.

listen.mode string

Ver listen.owner.

listen.acl_users string

Cuando se admiten las listas de control de acceso POSIX, puede establecerlas utilizando esta opción. Cuando se establece, listen.owner y listen.group se ignoran. El valor es una lista separada por comas de nombres de usuarios.

listen.acl_groups string

Ver listen.acl_users. El valor es una lista separada por comas de nombres de grupos.

listen.setfib int

Establecer la tabla de rutas asociada (FIB). Solo para FreeBSD. Valor por defecto: -1. Desde PHP 8.2.0.

user string

Usuario Unix de los procesos FPM. Esta opción es obligatoria.

group string

Grupo Unix de los procesos FPM. Si no se establece, se utiliza el grupo del usuario por defecto.

pm string

Elegir cómo el gestor de procesos controlará el número de procesos hijos. Valores posibles: static, ondemand, dynamic. Esta opción es obligatoria.

static - el número de procesos hijos es fijo (pm.max_children).

ondemand - los procesos se generan bajo demanda (cuando se solicita, a diferencia de dinámico, donde pm.start_servers se inician cuando se inicia el servicio.

dynamic - el número de procesos hijos se establece dinámicamente en función de las siguientes directivas: pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers.

pm.max_children int

El número de procesos hijos que se crearán cuando pm se establece en static y el número máximo de procesos hijos que se crearán cuando pm se establece en dynamic. Esta opción es obligatoria.

Esta opción establece el límite en el número de solicitudes simultáneas que se atenderán. Equivalente a la directiva ApacheMaxClients con mpm_prefork y a la variable de entorno PHP_FCGI_CHILDREN en el PHP FastCGI original.

pm.start_servers int

El número de procesos hijos creados al inicio. Solo se utiliza cuando pm se establece en dynamic. Valor por defecto: (min_spare_servers + max_spare_servers) / 2.

pm.min_spare_servers int

El número deseado de procesos de servidor inactivos. Solo se utiliza cuando pm se establece en dynamic. También obligatorio en este caso.

pm.max_spare_servers int

El número deseado de procesos de servidor inactivos. Solo se utiliza cuando pm se establece en dynamic. También obligatorio en este caso.

pm.max_spawn_rate int

El número de tasa para generar procesos hijos a la vez. Solo se utiliza cuando pm se establece en dynamic. Valor por defecto: 32

pm.process_idle_timeout mixed

El número de segundos después de los cuales un proceso inactivo será eliminado. Solo se utiliza cuando pm se establece en ondemand. Unidades disponibles: s(econdos)(por defecto), m(inutos), h(oras), o d(ías). Valor por defecto: 10s.

pm.max_requests int

El número de solicitudes que cada proceso hijo debe ejecutar antes de regenerarse. Esto puede ser útil para trabajar alrededor de fugas de memoria en bibliotecas de terceros. Para el procesamiento de solicitudes sin fin, especifique '0'. Equivalente a PHP_FCGI_MAX_REQUESTS. Valor por defecto: 0.

pm.status_listen string

La dirección en la que aceptar solicitudes de estado FastCGI. Esto crea un nuevo grupo invisible que puede manejar solicitudes de forma independiente. Esto es útil si el grupo principal está ocupado con solicitudes de larga duración porque aún es posible obtener la página de estado de FPM antes de finalizar las solicitudes de larga duración. La sintaxis es la misma que para la directiva listen. Valor por defecto: ninguno.

pm.status_path string

La URI para ver la página de estado de FPM. Este valor debe comenzar con una barra inicial (/). Si este valor no se establece, ninguna URI será reconocida como una página de estado. Valor por defecto: ninguno.

ping.path string

La URI de ping para llamar a la página de monitoreo de FPM. Si este valor no se establece, ninguna URI será reconocida como una página de ping. Esto podría usarse para probar desde fuera que FPM está vivo y respondiendo. Tenga en cuenta que el valor debe comenzar con una barra inicial (/).

ping.response string

Esta directiva puede usarse para personalizar la respuesta a una solicitud de ping. La respuesta se formatea como text/plain con un código de respuesta 200. Valor por defecto: pong.

process.priority int

Especifica la prioridad nice(2) a aplicar al proceso de trabajo (solo si está establecido). El valor puede variar de -19 (prioridad más alta) a 20 (prioridad más baja). Valor por defecto: no establecido.

process.dumpable bool

Establece la bandera de proceso dumpable (PR_SET_DUMPABLE prctl) incluso si el usuario o grupo del proceso es diferente al usuario del proceso principal. Permite crear un volcado de núcleo de proceso y ptrace el proceso para el usuario del grupo. Valor por defecto: no. Desde PHP 7.0.29, 7.1.17 y 7.2.5.

prefix string

Especificar prefijo para la evaluación de rutas

request_terminate_timeout mixed

El tiempo límite para atender una solicitud única después del cual el proceso de trabajo será eliminado. Esta opción debe usarse cuando la opción ini 'max_execution_time' no detiene la ejecución del script por alguna razón. Un valor de '0' significa 'Desactivado'. Unidades disponibles: s(econdos)(por defecto), m(inutos), h(oras), o d(ías). Valor por defecto: 0.

request_terminate_timeout_track_finished bool

El tiempo límite establecido por request_terminate_timeout no se activa después de un fastcgi_finish_request o cuando la aplicación ha terminado y se están llamando las funciones de cierre internas. Esta directiva habilitará el límite de tiempo para que se aplique incondicionalmente incluso en tales casos. Valor por defecto: no. Desde PHP 7.3.0.

request_slowlog_timeout mixed

El tiempo límite para atender una solicitud única después del cual se volcará un backtrace de PHP al archivo 'slowlog'. Un valor de '0' significa 'Desactivado'. Unidades disponibles: s(econdos)(por defecto), m(inutos), h(oras), o d(ías). Valor por defecto: 0.

request_slowlog_trace_depth int

La profundidad del registro de traza de pila de slowlog. Valor por defecto: 20. Desde PHP 7.2.0.

slowlog string

El archivo de registro para solicitudes lentas. Valor por defecto: #INSTALL_PREFIX#/log/php-fpm.log.slow.

rlimit_files int

Establecer el límite de descriptores de archivo abiertos para los procesos hijos en este grupo. Valor por defecto: valor definido por el sistema.

rlimit_core int

Establecer el límite máximo de tamaño de núcleo para los procesos hijos en este grupo. Valores posibles: 'unlimited' o un entero mayor o igual a 0. Valor por defecto: valor definido por el sistema.

chroot string

Cambiar al directorio raíz al inicio. Este valor debe definirse como una ruta absoluta. Cuando este valor no está establecido, no se utiliza chroot.

chdir string

Cambiar al directorio al inicio. Este valor debe ser una ruta absoluta. Valor por defecto: directorio actual o / cuando chroot.

catch_workers_output bool

Redirigir la salida y error estándar de los trabajadores al registro de errores principal. Si no está establecido, la salida y error estándar se redirigirán a /dev/null según las especificaciones de FastCGI. Valor por defecto: no.

decorate_workers_output bool

Habilitar la decoración de salida para la salida de los trabajadores cuando catch_workers_output está habilitado. Valor por defecto: yes. Disponible a partir de PHP 7.3.0.

clear_env bool

Limpiar el entorno en los trabajadores de FPM. Evita que variables de entorno arbitrarias lleguen a los procesos de trabajadores de FPM limpiando el entorno en los trabajadores antes de que se añadan las variables de entorno especificadas en esta configuración de grupo. Valor por defecto: Sí.

security.limit_extensions string

Limita las extensiones del script principal que FPM permitirá analizar. Esto puede evitar errores de configuración en el lado del servidor web. Solo debe limitar FPM a extensiones .php para evitar que usuarios malintencionados utilicen otras extensiones para ejecutar código php. Valor por defecto: .php .phar

apparmor_hat string

Si AppArmor está habilitado, permite cambiar de sombrero. Valor por defecto: no establecido

access.log string

El archivo de registro de acceso. Valor por defecto: no establecido

access.format string

El formato del registro de acceso. Valor por defecto: "%R - %u %t \"%m %r\" %s":

Opciones válidas
Marcador de posición Descripción
%% El carácter %
%C %CPU utilizado por la solicitud. Puede aceptar el siguiente formato: %{user}C para solo CPU de usuario, %{system}C para solo CPU del sistema, %{total}C para CPU de usuario + sistema (por defecto)
%d Tiempo empleado para atender la solicitud. Puede aceptar los siguientes formatos para precisión: %{seconds}d (por defecto), %{milliseconds}d, %{microseconds}d
%{name}e Una variable de entorno (igual que $_ENV o $_SERVER). Un nombre de variable debe especificarse entre llaves para especificar el nombre de la variable de entorno. Por ejemplo, específicos del servidor como %{REQUEST_METHOD}e o %{SERVER_PROTOCOL}e, encabezados HTTP como %{HTTP_HOST}e o %{HTTP_USER_AGENT}e
%f Nombre del script
%l Content-Length de la solicitud (solo para solicitudes HTTP POST)
%m Método HTTP de la solicitud
%M Pico de memoria asignada por PHP. Puede aceptar el siguiente formato: %{bytes}M (por defecto), %{kilobytes}M %{kilo}M, %{megabytes}M, %{mega}M
%n Nombre del grupo
%{name}o Encabezado de salida. El nombre del encabezado debe especificarse entre llaves. Por ejemplo: %{Content-Type}o, %{X-Powered-By}o, %{Transfer-Encoding}o
%p PID del hijo que atendió la solicitud
%P PID del padre del hijo que atendió la solicitud
%q Cadena de consulta
%Q El carácter '?', o pegamento entre %q y %r, si existe la cadena de consulta
%r URI de solicitud sin la cadena de consulta, ver %q y %Q
%R Dirección IP remota
%s Estado (código de respuesta)
%t Hora del servidor en que se recibió la solicitud. Puede aceptar un formato strftime(3): %d/%b/%Y:%H:%M:%S %z (por defecto) El formato strftime(3) debe encapsularse en una etiqueta %{<strftime_format>}t, por ejemplo, para una cadena de tiempo en formato ISO8601, use: %{%Y-%m-%dT%H:%M:%S%z}t
%T Hora en que se escribió el registro (cuando la solicitud terminó). Puede aceptar un formato strftime(3): %d/%b/%Y:%H:%M:%S %z (por defecto). El formato strftime(3) debe encapsularse en una etiqueta %{<strftime_format>}T, por ejemplo, para una cadena de tiempo en formato ISO8601, use: %{%Y-%m-%dT%H:%M:%S%z}T
%u Usuario de autenticación básica, si se especifica en el encabezado Authorization

access.suppress_path array

Una lista de valores de request_uri que deben filtrarse del registro de acceso. Valor por defecto: no establecido. Desde PHP 8.2.0.

Es posible pasar variables de entorno adicionales y actualizar la configuración de PHP de un grupo determinado. Para hacer esto, debe agregar las siguientes opciones al archivo de configuración del grupo.

Ejemplo #1 Pasar variables de entorno y configuración de PHP a un grupo

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
La configuración de PHP pasada con php_value o php_flag sobrescribirá su valor anterior. Tenga en cuenta que definir disable_functions o disable_classes no sobrescribirá los valores previamente definidos de php.ini, sino que añadirá el nuevo valor en su lugar.

Las configuraciones definidas con php_admin_value y php_admin_flag no pueden ser anuladas con ini_set().

La configuración de PHP puede establecerse en la configuración del servidor web.

Ejemplo #2 Establecer configuración de PHP en 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";
Precaución

Debido a que estas configuraciones se pasan a php-fpm como encabezados fastcgi, php-fpm no debe estar vinculado a una dirección accesible en todo el mundo. De lo contrario, cualquiera podría alterar las opciones de configuración de PHP. Ver también listen.allowed_clients.

Nota: Los grupos no son un mecanismo de seguridad, porque no proporcionan una separación completa; por ejemplo, todos los grupos utilizarían una sola instancia de OPcache.

add a note

User Contributed Notes 9 notes

up
19
ikrabbe
7 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
13
rob at librobert dot net
4 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
16
gadnet at aqueos dot com
11 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
7
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
6
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
9
Frank DENIS
14 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
7
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
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
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