PHP 8.4.1 Released!

Configuração

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

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 log de erro. Valor padrão: #INSTALL_PREFIX#/log/php-fpm.log. Se configurado com "syslog", o log será enviado para o syslogd ao invés de ser escrito em uma arquivo local.

log_level string

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

log_limit int

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

log_buffering bool

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

syslog.facility string

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

syslog.ident string

No início de todas as mensagens. Se possuir múltiplas instâncias do FPM rodando no mesmo servidor, pode-se modificar 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 'Off'. 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(minutos), h(horas), ou d(ias). Unidade Padrão: seconds. Valor padrão: 0 (desligado).

process_control_timeout mixed

Prazo para processos filhos para esperar uma reação em sinais de mestre. Unidades disponíveis: s(egundos), m(minutos), h(horas), ou d(ias) Unidade Padrão: seconds. Valor padrão: 0.

process.max int

O número máximo de processos que o FPM criará. Projeto para controlar o número global de processos ao utilizar PM dinâmico em várias rotinas. Utilize com cautela. Valor padrão: 0.

process.priority int

Especifica a prioridade nice(2) a ser aplicada ao processo mestre (se estiver configurado). O valor varia de -19 (maior prioridade) até 20 (menor prioridade). Valor padrão: não especificado.

daemonize bool

Faz o FPM ser executado 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

Configura o descritor rlimit para abertura de arquivos no processo mestre. Valor padrão: valor definido pelo sistema operacional.

rlimit_core int

Configura o tamanho do núcleo rlimit no processo mestre. Valor padrão: 0.

events.mechanism string

Especifica o mecanismo de eventos que o FPM utilizará. Os seguintes estão disponíveis: select, pool, epoll, kqueue (*BSD), port (Solaris). Valor padrão: não especificado (detectado automaticamente).

systemd_interval int

Quando o FPM for compilado com integração ao systemd, especifica o intervalo, em segundos, entre a notificação ao systemd. Defina com 0 para desabilitar. Valor padrão: 10.

Lista de diretivas de rotina

Com o FPM você pode executar várias rotinas de processos com configuração diferente. Essas são as configurações que podem ser otimizadas por cada rotina.

listen string

O endereço que aceita pedidos FastCGI. Sintaxes válidas são: 'ip.add.re.ss:port', 'port', '/path/to/unix/socket'. Esta opção é obrigatória em cada rotina.

listen.backlog int

Define o backlog 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 de clientes FastCGI que estão autorizados a conectar. Equivalente à variável de ambiente FCGI_WEB_SERVER_ADDRS no PHP FastCGI (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: nenhum (aceita conexões de qualquer IP).

listen.owner string

Define permissões para socket 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 permitir conexões independentemente das permissões. Os valores padrão: usuários e grupos são definidos como o usuário que está executando, de modo está definido para 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, separada por vírgula.

listen.acl_groups string

Veja listen.acl_users. Seu valor é uma lista de nomes de grupo, separada 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 do usuário padrão será utilizado.

pm string

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

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

ondemand - os processos sob demanda (quando solicitado, em oposição a dinâmica, então pm.start_servers são iniciadas quando o serviço é iniciado.

dynamic - o número de processos filhos são definidos dinamicamente com base nas seguintes diretrizes: pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers.

pm.max_children int

O número de processos filhos que podem ser criados quando pm está configurado como static e o número máximo de processos filhos podem ser criados quando pm está configurado como dynamic. Essa opção é obrigatória.

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

pm.start_servers int

O número de processos filhos criados na inicialização. Usado apenas quando pm é configurado em 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 inativos. Usado apenas quando pm está configurado como dynamic. Também obrigatório neste caso.

pm.max_spare_servers int

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

pm.max_spawn_rate int

O número de processos para inicializar de uma vez. Utilizado apenas quando pm é configurado para dynamic. Valor padrão: 32

pm.process_idle_timeout mixed

O número de segundos após qual um processo parado será encerrado. Utilizado apenas quando pm é configurado como ondemand. Unidades disponíveis: s(segunfos)(default), m(minutos), h(horas), or d(dias). Valor padrão: 10s.

pm.max_requests int

O número de solicitações de cada processo filho deve ser executado antes respawning. Isto pode ser útil para contornar falhas de memória de bibliotecas de terceiro partido. Para o processamento de pedido interminável especificar '0 '. equivalente a PHP_FCGI_MAX_REQUESTS. Valor padrão: 0.

pm.status_listen string

O endereço no qual o FastCGI acessa requisições de status. Isto cria um novo pool invisível que sustenta essas requisições independentemente. Útil se o pool principal está ocupado com requisições longas dado que é possível obter a página de status FPM enquanto rodando requisições longas. A sintaxe é a mesma da opçãolisten. Valor padrão: vazio.

pm.status_path string

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

ping.path string

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

ping.response string

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

process.priority int

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

process.dumpable bool

Configura a flag dumpable (PR_SET_DUMPABLE prctl) mesmo no caso do processo de usuário ou grupo for diferente do processo inicializador. Isto permite criar core dumps de processos e realizar ptrace no user pool. Valor padrão: no. Desde os PHP 7.0.29, 7.1.17 e 7.2.5.

prefix string

Especifica um prefix para interpretação de caminhos.

request_terminate_timeout mixed

O tempo limite para servir um único pedido após o qual o processo trabalha serão encerradas. Esta opção deve ser usada quando o 'max_execution_time', opção do arquivo ini não parar a execução do script por algum motivo. Um valor de '0', significa 'Off'. Unidades disponíveis: s(econds) (padrão), m(inuts), h(our), ou d(ays). Valor padrão: 0.

request_terminate_timeout_track_finished bool

O timeout configurado para request_terminate_timeout não é disparado depois de fastcgi_finish_request or quando a aplicação terminou e funções internas de finalização estão rodando. Esta diretiva irá aplicar o timeout mesmo para esses casos. Valor padrão: no. Desde o PHP 7.3.0.

request_slowlog_timeout mixed

O tempo limite para servir um único pedido depois que um rastreamento PHP serão despejados para o arquivo 'slowlog. Um valor de '0 'significa' Off '. Unidades disponíveis: s(egundos)(padrão), m(inutos), h(oras), or d(dias). Valor padrão: 0.

request_slowlog_trace_depth int

A profundidade do stack trace de slowlog. Valor padrão: 20. Desde o PHP 7.2.0.

slowlog string

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

rlimit_files int

Define o descritor de arquivo de abertura rlimit. Valor padrão: valor definido pelo sistema.

rlimit_core int

Define o tamanho do núcleo máxímo do rlimit. Valores possíveis: 'unlimited' ou um número inteiro maior ou igual a 0. Valor padrão: valor definido pelo sistema.

chroot string

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

chdir string

Chdir neste diretório, na inicialização. Este valor deve ser um caminho absoluto. Valor padrão: diretório atual ou / ao chroot.

catch_workers_output bool

Redirecionar stdout e stderr no log de erro principal. Se não for 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 do outpur de workers quando catch_workers_output estiver ativo. Valor padrão: yes. Disponível desde o PHP 7.3.0.

clear_env bool

Limpa o ambiente dos workers do FPM. Previne que variáveis de ambiente arbitrárias alcancem os processos dos workers do FPM limpando o ambiente nos workers antes das variáveis de ambientes desta rotina serem adicionadas. Valor padrão: Yes.

security.limit_extensions string

Limita as extensões que o script principal do FPM possui permissão a analisar. Evita problemas de configurações no servidor de aplicação. Você deve limitar as extensões do FPM a somente o .php para evitar que usuários maliciosos utilizem outras extensões para executar códigos php. Default value: .php .phar

apparmor_hat string

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

access.log string

O arquivo de log de acessos. Valor padrão: não configurado.

access.format string

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

Valid options
Código Descrição
%% Caractere %
%C %CPU usada 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 of the request (for HTTP POST request only)
%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 pool
%{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 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 determinada rotina. Para fazer isso, precisa-se adicionar as seguintes opções no arquivo de configuração da rotina.

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

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 que também podem ser definidas no servidor.

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 acessível. Caso contrário, qualquer um poderá alterar as opções de configuração do PHP. Veja também: listen.allowed_clients.

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

adicione uma nota

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