International PHP Conference Munich 2025

Configuração

FPM usa a sintaxe do php.ini para seus arquivos de configuração - php-fpm.conf, e para arquivos de configuração de conuntos.

Lista de diretivas globais php-fpm.conf

pid string

Caminho para o arquivo PID. Valor padrão: nenhum.

error_log string

Caminho para o arquivo de registro de erro. Valor padrão: #INSTALL_PREFIX#/log/php-fpm.log. Se configurado como "syslog", o registro será enviado para o syslogd em vez de ser escrito em um arquivo local.

log_level string

Nível de registro de erro. Valores possíveis: alert, error, warning, notice, debug. Valor padrão: notice.

log_limit int

Limite de tamanho das linhas de regitro para permitir mensagens maiores que 1024 caracteres sem quebras. Valor padrão: 1024. Disponível desde o PHP 7.3.0.

log_buffering bool

Log sem buffer extra (experimental). Valor padrão: yes. Disponível desde o PHP 7.3.0.

syslog.facility string

Usado para especificar que tipo de programa está registrando a mensagem. Valor Padrão: daemon.

syslog.ident string

String incluída no início de cada mensagem. Se houver múltiplas instâncias do FPM em execução no mesmo servidor, pode-se alterar o valor padrão para adaptar-se às necessidades. Valor padrão: php-fpm.

emergency_restart_threshold int

Se esse número de processos filho sair com SIGSEGV ou SIGBUS dentro do intervalo de tempo definido pelo emergency_restart_interval, o FPM será reiniciado. Um valor 0 significa 'desligado'. Valor padrão: 0 (desligado).

emergency_restart_interval mixed

Intervalo de tempo utilizado por emergency_restart_interval para determinar quando um reinício será feito. Pode ser útil para contornar corrupções acidentais em memória compartilhada de um acelerador. Unidades disponíveis: s(egundos), m(inutos), h(oras), ou d(ias). Unidade Padrão: segundos. Valor padrão: 0 (desligado).

process_control_timeout mixed

Tempo limite para processos filhos esperarem por uma reação nos sinais do principal. Unidades disponíveis: s(egundos), m(inutos), h(oras) ou d(ias). Unidade Padrão: segundos. Valor padrão: 0.

process.max int

O número máximo de processos que o FPM bifurcará. Foi projetado para controlar o número global de processos ao utilizar gerenciamento dinâmico de processos em vários pools. Utilize com cautela. Valor padrão: 0.

process.priority int

Especifica a prioridade de nice(2) a ser aplicada ao processo principal (somente se estiver configurado). O valor pode variar entre -19 (maior prioridade) e 20 (menor prioridade). Valor padrão: não definido.

daemonize bool

Envia o FPM para execução em segundo plano. Defina como 'no' para manter o FPM em primeiro plano para fins de depuração. Valor padrão: yes.

rlimit_files int

Define o limite de descritores de arquivos abertos para o processo principal. Valor padrão: valor definido pelo sistema operacional.

rlimit_core int

Define o limite máximo do tamanho do núcleo do processo principal. Valor padrão: 0.

events.mechanism string

Especifica o mecanismo de eventos que o FPM utilizará. Os seguintes estão disponíveis: epoll, kqueue (*BSD), port (Solaris), poll e select. Valor padrão: não definido (detecção automática com preferência para epoll e kqueue).

systemd_interval int

Quando o FPM for compilado com integração ao systemd, especifica o intervalo, em segundos, entre notificações de relatório de saúde ao systemd. Defina com 0 para desabilitar. Valor padrão: 10.

Lista de diretivas de conjuntos

Com o FPM, pode-se executar vários conjuntos (pools) de processos com configurações diferentes. Essas são as configurações que podem ser otimizadas por cada conjunto.

listen string

O endereço onde as requisições FastCGI serão aceitas. Sintaxes válidas são: 'en.dere.ço.ip:porta', 'porta', '/caminho/para/soquete/unix'. Esta opção é obrigatória para cada conjunto.

listen.backlog int

Define o acúmulo de listen(2). O valor de -1 significa o máximo em sistemas BSD;. Valor padrão: -1 (FreeBSD ou OpenBSD) ou 511 (Linux e outras plataformas).

listen.allowed_clients string

Lista de endereços IPv4 ou IPv6 de clientes FastCGI que estão autorizados a conectar. Equivalente à variável de ambiente FCGI_WEB_SERVER_ADDRS no FastCGI original do PHP (5.2.2+). Só faz sentido com um soquete de escuta TCP. Cada endereço deve ser separado por uma vírgula. Se este valor for deixado em branco, conexões serão aceitas a partir de qualquer endereço IP. Valor padrão: não definido (qualquer endereço IP aceito).

listen.owner string

Define permissões para soquete Unix, se utilizado. No Linux, permissões de leitura/gravação devem ser definidas de forma a permitir conexões a partir de um servidor web. Muitos sistemas derivados do BSD permitem conexões independentemente das permissões. Valores padrão: usuários e grupos são definidos como o usuário que está executando, o modo é definido como 0660.

listen.group string

Veja listen.owner.

listen.mode string

Veja listen.owner.

listen.acl_users string

Quando o suporte ao Access Control Lists POSIX for suportado, pode-se configurá-lo utilizando esta opção. Ao configurá-lo, listen.owner e listen.group serão ignorados. Seu valor é uma lista de nomes de usuários, separados por vírgula.

listen.acl_groups string

Veja listen.acl_users. Seu valor é uma lista de nomes de grupo, separados por vírgula.

user string

Usuário Unix dos processos FPM. Esta opção é obrigatória.

group string

Grupo Unix dos processos FPM. Se não for definido, o grupo padrão do usuário será utilizado.

pm string

Define como o gerenciador de processos controlará o número de processos filhos. Valores possíveis: static, ondemand ou dynamic. Esta opção é obrigatória.

static - o número de processos filho é fixo (pm.max_children).

ondemand - os processos são criados sob demanda (quando solicitado, em oposição a "dynamic", onde pm.start_servers são iniciados quando o serviço é iniciado.

dynamic - o número de processos filhos é definido dinamicamente com base nas seguintes diretivas: pm.max_children, pm.start_servers, pm.min_spare_servers e pm.max_spare_servers.

pm.max_children int

O número de processos filhos a serem criados quando pm está definido como static e o número máximo de processos filhos a serem criados quando pm está deinido como dynamic. Esta opção é obrigatória.

Esta opção define o limite para o número de solicitações simultâneas que serão servidas. Equivalente à directiva ApacheMaxClients com mpm_prefork e à variável de ambiente PHP_FCGI_CHILDREN no FastCGI original do PHP.

pm.start_servers int

O número de processos filhos criados na inicialização. Usado apenas quando pm é definido para dynamic. Valor padrão: (min_spare_servers + max_spare_servers) / 2.

pm.min_spare_servers int

O número mínimo desejado de processos servidores ociosos. Usado apenas quando pm está definido como dynamic. Também obrigatório neste caso.

pm.max_spare_servers int

O número máximo desejado de processos servidores ociosos. Usado apenas quando pm está definido como dynamic. Também obrigatório neste caso.

pm.max_spawn_rate int

A taxa de criação de processos filhos simulataneamente. Utilizado apenas quando pm é definido para dynamic. Valor padrão: 32

pm.process_idle_timeout mixed

O número de segundos após o qual um processo ocioso será encerrado. Utilizado apenas quando pm é configurado como ondemand. Unidades disponíveis: s(egundos) - padrão, m(inutos), h(oras) ou d(ias). Valor padrão: 10s.

pm.max_requests int

O número de solicitações que cada processo filho deve executar antes de ressurgir. Isto pode ser útil para contornar vazamentos de memória em bibliotecas de terceiros. Para processamento interminável de solicitação especifique '0'. Equivalente a PHP_FCGI_MAX_REQUESTS. Valor padrão: 0.

pm.status_listen string

O endereço no qual serão aceitas requisições de status FastCGI. Isto cria um novo conunto invisível que pode manipular as requisições independentemente. Útil se o conjunto principal está ocupado com requisições longas dado que é possível obter a página de status FPM antes de terminar essas requisições longas. A sintaxe é a mesma da diretiva listen. Valor padrão: none.

pm.status_path string

O URI para visualizar a página de status do FPM. Este valor precisa começar com uma contra barra (/). Se o valor não estiver definido, nenhuma URI será reconhecida como uma página de status. Valor padrão: none.

ping.path string

O URI de ping para chamar a página de monitoramento do FPM. Se este valor não estiver definido, nenhuma URI será reconhecido como uma página de ping. Isto poderia ser usado para testar de fora que o FPM está vivo e respondendo. Observe que o valor deve começar com uma barra (/).

ping.response string

Esta diretiva pode ser usado para personalizar a resposta a um pedido de ping. A resposta é formatada como text/plain com um código de resposta 200. Valor padrão: pong.

process.priority int

Especifica a prioridade de nice(2) a ser aplicada ao processo (somente se informado). Esse valor pode variar de -19 (prioridade máxima) to 20 (priridade mínima). Valor padrão: não definido.

process.dumpable bool

Configura o sinalizador dumpable (PR_SET_DUMPABLE prctl) mesmo no caso do usuário ou ou grupo do processo for diferente usuário do processo principal. Permite criar despejos do núcleo do processo e rastrear o processo para o usuário do conjunto. Valor padrão: no. Desde o PHP 7.0.29, 7.1.17 e 7.2.5.

prefix string

Especifica um prefixo para interpretação de caminhos.

request_terminate_timeout mixed

O tempo limite para servir uma requisição única após o qual o processo será encerrado. Esta opção deveria ser usada quando a opção INI 'max_execution_time', não parar a execução do script por algum motivo. Um valor de '0' significa 'Off'. Unidades disponíveis: s(egundos) - padrão, m(inutos), h(oras) ou d(ias). Valor padrão: 0.

request_terminate_timeout_track_finished bool

O limite de tempo configurado para request_terminate_timeout não é disparado depois de um fastcgi_finish_request ou quando a aplicação terminou e funções internas de desligamento estão sendo chamadas. Esta diretiva irá habilitar o limite de tempo incondicionalmente mesmo para esses casos. Valor padrão: no. Desde o PHP 7.3.0.

request_slowlog_timeout mixed

O tempo limite para servir uma requisição única após o qual um rastreamento PHP será despejado para o arquivo 'slowlog'. Um valor de '0' significa 'Off'. Unidades disponíveis: s(egundos) - padrão, m(inutos), h(oras) ou d(ias). Valor padrão: 0.

request_slowlog_trace_depth int

A profundidade do rastreamento de pilha para o registro de requisições lentas. Valor padrão: 20. Desde o PHP 7.2.0.

slowlog string

O arquivo de log de requisições lentas. Valor padrão: #INSTALL_PREFIX#/log/php-fpm.log.slow.

rlimit_files int

Define o limite de descritores de arquivos abertos para processos filhos neste conunto. Valor padrão: valor definido pelo sistema.

rlimit_core int

Define o limite máximo do tamanho do núcleo para processos filhos neste conjunto. Valores possíveis: 'unlimited' ou um número inteiro maior ou igual a 0. Valor padrão: valor definido pelo sistema.

chroot string

Realiza um chroot para este diretório na inicialização. Este valor precisa ser definido como um caminho absoluto. Quando este valor não está definido, chroot não é usado.

chdir string

Realiza um chdir neste diretório na inicialização. Este valor precisa ser um caminho absoluto. Valor padrão: diretório atual ou / no caso de chroot.

catch_workers_output bool

Redireciona stdout e stderr para o registro de erros principal. Se não estiver definido, stdout e stderr serão redirecionadas para /dev/null de acordo com especificações FastCGI. Valor padrão: no.

decorate_workers_output bool

Ativa a decoração de saída dos processos quando catch_workers_output estiver ativo. Valor padrão: yes. Disponível desde o PHP 7.3.0.

clear_env bool

Limpa o ambiente nos processos do FPM. Evita que variáveis de ambiente arbitrárias alcancem os processos do FPM limpando o ambiente neles antes que as variáveis de ambientes especificados nesta configuração de conjunto sejam adicionadas. Valor padrão: Yes.

security.limit_extensions string

Limita as extensões de arquivo do script principal que o FPM permitirá a interpretação. Isto pode evitar erros de configurações no lado do servidor web. FPM deve ser limitado a extensões .php para evitar que usuários maliciosos utilizem outras extensões para executar códigos php. Valor padrão: .php .phar

apparmor_hat string

Se o AppArmor estiver ativo, isto permite modificar o "hat". Valor padrão: não definido.

access.log string

O arquivo de registro de acessos. Valor padrão: não definido.

access.format string

O formato do registro de acessos. Valor padrão: "%R - %u %t \"%m %r\" %s":

Opções válidas
Marcador Descrição
%% Caractere %
%C %CPU usado pela requisição. Aceita estes formatos: %{user}C somente para CPU de usuário, %{system}C domente para CPU de sistema e %{total}C para CPU de usuário + sistema (padrão)
%d Tempo decorrido para servir a requisição. Aceita os seguites formatos de precisão: %{seconds}d (segundos - padrão), %{milliseconds}d (milissegundos) e %{microseconds}d (microssegundos).
%{nome}e Uma variável de ambiente (o mesmo que $_ENV ou $_SERVER). O nome da variável de ambiente precisa ser informada entre chaves. Por exemplo, variáveis específicas de servidor como %{REQUEST_METHOD}e ou %{SERVER_PROTOCOL}e, cabeçalhos HTTP como %{HTTP_HOST}e ou %{HTTP_USER_AGENT}e.
%f Nome do arquivo do script
%l Content-Length da requisição (somente para requisiçoes HTTP POST)
%m Método de requisição HTTP
%M Pico de memória alocada pelo PHP. Pode aceitar os seguintes formatos: %{bytes}M (padrão), %{kilobytes}M %{kilo}M, %{megabytes}M ou %{mega}M.
%n Nome do conjunto
%{nome}o Cabeçalho de saída. O nome do cabeçalho precisa ser especificado entre chaves. Por exemplo: %{Content-Type}o, %{X-Powered-By}o, %{Transfer-Encoding}o.
%p PID do processo filho que serviu à requisição
%P PID do processo pai do processo filho que serviu à requisição
%q String de consulta
%Q O caractere '?' ou a junção de %q e %r, se a string de consulta existir
%r URI de requisição sem a string de consulta, consulte %q e %Q
%R Endereço IP remoto
%s Status (código de resposta)
%t Horário do servidor em que a requisição foi recebida. Pode aceitar um formato de strftime(3): %d/%b/%Y:%H:%M:%S %z (padrão). O formato strftime(3) precisa ser encapsulado em uma etiqueta %{<strftime_format>}t, por exemplo, para uma string de horário formatada em ISO8601, use: %{%Y-%m-%dT%H:%M:%S%z}t
%T Horário em que o registro foi preenchido (ao término da requisição). Pode aceitar um formato strftime(3): %d/%b/%Y:%H:%M:%S %z (padrão). O formato strftime(3) precisa ser encapsulado em uma etiqueta %{<strftime_format>}T, por exemplo, para uma string de horário formatada em ISO8601, use: %{%Y-%m-%dT%H:%M:%S%z}T
%u Usuário autenticado pelo acesso básico, se especificado no cabeçalho Authorization

É possível passar variáveis de ambiente adicionais e atualizar as configurações do PHP de uma determinado conjunto. Para fazer isso, precisa-se adicionar as seguintes opções no arquivo de configuração do conjunto.

Exemplo #1 Passando variáveis de ambiente e configurações do PHP para o conjunto

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
Configurações do PHP feitas com php_value ou php_flag irão sobrescrever o valor anterior. Observe que a definição de disable_functions ou disable_classes não irá substituir os valores previamente definidos no php.ini, mas adicionará o novo valor em seu lugar.

Configurações definidas com php_admin_value e php_admin_flag não podem ser sobrescritas com ini_set().

Configurações do PHP podem ser definidas no servidor web.

Exemplo #2 Definindo as configurações de PHP no 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";
Cuidado

Como essas configurações são passadas para o php-fpm como cabeçalhos FastCGI, o php-fpm não deve ser vinculado a um endereço amplamente acessível. Caso contrário, qualquer um poderá alterar as opções de configuração do PHP. Veja também: listen.allowed_clients.

Nota: Conjuntos não são um mecanismo de segurança, dado que eles não fornecem uma separação total; por exemplo, todos os conjuntos utilizam uma única instância do OPcache.

adicione uma nota

Notas Enviadas por Usuários (em inglês) 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
11
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
14
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
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
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