Configuration

FPM utilise la syntaxe php.ini pour son fichier de configuration - php-fpm.conf ainsi que les fichiers de configuration de la file d'attente.

Liste des directives globales de php-fpm.conf

pid chaîne de caractères

Chemin vers le fichier PID. Par défaut : none.

error_log chaîne de caractères

Chemin vers le fichier de journal. Par défaut: #INSTALL_PREFIX#/log/php-fpm.log. Si défini à "syslog", le journal est envoyé vers syslogd au lieu d'être écrit dans un fichier local.

log_level chaîne de caractères

Niveau de journalisation d'erreur. Valeurs possibles : alert, error, warning, notice, debug. Par défaut : notice.

log_limit entier

Limite d'historique pour les lignes enregistrés qui permet des messages d'événements plus long que 1024 caractères sans s'emballer. Valeur par default : 1024 Disponible à partir de PHP 7.3.0.

log_buffering booléen

Historique expérimental sans tampon. Valeur par default : yes. Disponible à partir de PHP 7.3.0.

syslog.facility chaîne de caractères

Utilisé pour spécifier quel type de programme écrit le message. Valeur par défaut : daemon.

syslog.ident chaîne de caractères

Ajoute au début de chaque message. Si vous avez de multiples instances FPM s'exécutant sur le même serveur, vous pouvez changer la valeur par défaut afin qu'elle convienne à vos besoins. Valeur par défaut : php-fpm.

emergency_restart_threshold entier

Si ce nombre de processus fils terminent avec un SIGSEGV ou SIGBUS dans l'intervalle de temps précisé dans emergency_restart_interval, alors FPM redémarrera. Une valeur de 0 signifie 'Off'. Valeur par défaut : 0 (Off).

emergency_restart_interval mixed

Intervalle de temps utilisé par emergency_restart_interval pour determiner lorsqu'un redémarrage doux doit être lancé. Ceci peut être utile pour contourner des corruptions accidentelles dans la mémoire partagée d'un accelérateur. Unités disponibles : s(econdes), m(inutes), h(eures), ou d(ays). Unité par défaut : secondes. Valeur par défaut : 0 (Off).

process_control_timeout mixed

Temps limite qu'attendront les processus fils pour réagir aux signaux du père. Unités disponibles : s(econdes), m(inutes), h(eures), ou d(ays) Unité par défaut : secondes. Valeur par défaut : 0.

process.max entier

Le nombre maximum de processus que FPM va forker. Ceci a été conçu pour contrôler le nombre global de processus lors de l'utilisation d'un gestionnaire de processus dynamique avec beaucoup de pools. À utiliser avec attention. Valeur par défaut : 0.

process.priority entier

Défini la priorité nice(2) à appliquer au processus principal (uniquement si défini) La valeur peut varier de -19 (priorité haute) à 20 (priorité basse). Valeur par défaut : non défini.

daemonize booléen

Envoie FPM en arrière-plan. Mettez 'no' pour garder FPM au premier plan lors du débogage. Valeur par défaut : yes.

rlimit_files entier

Défini la rlimit pour les descripteurs de fichiers ouverts pour le processus principal. Valeur par défaut : valeur définie par le système.

rlimit_core entier

Défini la taille maximale de rlimit pour le processus principal. Valeur par défaut : 0.

events.mechanism chaîne de caractères

Spécifie le gestionnaire d’événement que FPM va utiliser. Sont disponibles : select, pool, epoll, kqueue (*BSD), port (Solaris). Valeur par défaut : non défini (détection automatique).

systemd_interval entier

Quand FPM est construit avec le support de systemd, spécifie l'intervalle en seconde, entre les notifications de rapport de santé envoyé à systemd. Définir à 0 pour désactiver. Valeur par défaut : 10.

Liste des directives de pool

Avec FPM vous pouvez exécuter plusieurs pools de processus avec des paramètres différents. Voici les paramètres qui peuvent être ajustés par pool.

listen chaîne de caractères

L'adresse pour accepter des requêtes FastCGI. Syntaxes valides : 'ip.add.re.ss:port', 'port', '/path/to/unix/socket'. Cette option est obligatoire pour chaque pool.

listen.backlog entier

Affecte listen(2) backlog. Une valeur de -1 signifie le maximum sur les systèmes BSD. Valeur par défaut : -1 (FreeBSD ou OpenBSD) ou 511 (Linux et autres plateformes).

listen.allowed_clients chaîne de caractères

Liste des adresses IPv4 ou IPv6 des clients FastCGI autorisés à se connecter. C'est équivalent à la variable d'environnement FCGI_WEB_SERVER_ADDRS dans le système FastCGI original de PHP (5.2.2+). N'a de sens qu'avec un socket tcp en écoute. Chaque adresse doit être séparée par une virgule. Si cette valeur n'est pas précisée, les connexions seront acceptées depuis toute adresse ip. Valeur par défaut: non définie (toute adresse IP acceptée).

listen.owner chaîne de caractères

Affecte les permissions pour le socket Unix si utilisé. Sous Linux, les permissions read/write doivent être affectées pour autoriser des connexions depuis un serveur web. Beaucoup de systèmes dérivés BSD autorisent les connexions quelles que soient les permissions. Valeurs par défaut : user et group sont ceux de l'utilisateur courant, le mode est 0660.

listen.group chaîne de caractères

Voyez listen.owner.

listen.mode chaîne de caractères

Voyez listen.owner.

listen.acl_users chaîne de caractères

Quand les listes de contrôle d'accès POSIX sont supportées, vous pouvez les définir en utilisant cette option. Quand défini, listen.owner et listen.group sont ignorés. La valeur est une liste de noms d'utilisateurs séparés par des virgules.

listen.acl_groups chaîne de caractères

Voir listen.acl_users. La valeur est une liste de noms de groupes séparés par des virgules.

user chaîne de caractères

Utilisateur Unix des processus FPM. Cette option est obligatoire.

group chaîne de caractères

Groupe Unix des processus FPM. Si non précisé, le groupe de l'utilisateur est utilisé.

pm chaîne de caractères

Choisi comment le gestionnaire de processus va contrôler le nombre de processus fils. Valeurs possibles : static, ondemand, dynamic. Option obligatoire.

static - nombre de processus fils fixés (pm.max_children).

ondemand - le processus se réactive à la demande (lorsque demandé, c'est l'opposé de dynamique où pm.start_servers sont démarrés lorsque le service démarre).

dynamic - nombre de processus fils dynamiques basé sur les directives suivantes: pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers.

pm.max_children entier

Nombre de processus fils à créer lorsque pm est réglé sur static. Nombre maximum de processus fils à créer lorsque pm est réglé sur dynamic. Option obligatoire.

Cette option affecte la limite du nombre de requêtes simultanées qui seront servies. Equivalent à ApacheMaxClients avec mpm_prefork et à PHP_FCGI_CHILDREN dans l'implémentation originale de FastCGI de PHP.

pm.start_servers entier

Nombre de processus fils à créer au démarrage. Utilisé seulement si pm est réglé sur dynamic. Valeur par défaut : min_spare_servers + (max_spare_servers - min_spare_servers) / 2.

pm.min_spare_servers entier

Nombre minimum de processus au repos (idle) voulus. Utilisé seulement si pm est réglé sur dynamic. Obligatoire dans ce cas.

pm.max_spare_servers entier

Nombre maximum de processus au repos (idle) voulus. Utilisé seulement si pm est réglé sur dynamic. Obligatoire dans ce cas.

pm.max_spawn_rate int

Nombre maximum de taux de génération de processus enfants simultanés. Utilisé seulement si pm est défini à dynamic.

pm.process_idle_timeout mixed

Nombre de secondes après lesquelles un processus d'inactif sera tué. Utilisé uniquelent quand pm est défini à ondemand. Unité disponible : s (secondes)(par défaut), m (minutes), h (heure), ou d (jourd). Valeur par défaut : 10s.

pm.max_requests entier

Nombre de requête que chaque processus fils devrait exécuter avant de renaitre. Ceci peut être utile pour contourner des fuites mémoires dans des librairies tierces. Pour un traitement sans fin des requêtes, précisez '0'. Equivalent à PHP_FCGI_MAX_REQUESTS. Par défaut : 0.

pm.status_listen string

L'adresse sur laquelle accepter la demande de statut FastCGI. Cela crée un nouveau pool invisible qui peut traiter les requêtes indépendamment. Ceci est utile si le pool principal est occupé par des requêtes de longue durée car il est toujours possible d'obtenir le statut FPM status page tant qu'elles ne sont pas terminées. La syntaxe est la même que pour la directive listen. Valeur par défaut : none.

pm.status_path chaîne de caractères

L'URI vers la page de statut de FPM. Cette valeur doit commencer par une barre oblique (/). Si cette valeur n'est pas définie, aucun URI ne sera reconnu en tant qu'une page d'état. Valeur par défaut : none.

ping.path chaîne de caractères

L'URI de ping pour appeler la page de monitoring de FPM. Si aucune valeur n'est précisée, aucune page de ping ne sera disponible. Ceci pourrait être utilisé pour tester depuis l'extérieur si FPM est toujours disponible et prêt à répondre. Notez que la valeur doit commencer par un slash (/).

ping.response chaîne de caractères

Cette directive est utile pour personnaliser la réponse à une requête de ping. La réponse est formatée comme text/plain avec un code de réponse de 200. Valeur par défaut : pong.

process.priority entier

Spécifiez la priorité nice(2) à appliquer au processus de travail (uniquement s'il est défini). La valeur peut varier de -19 (priorité la plus élevée) à 20 (priorité la plus basse). Valeur par défaut: non définie.

process.dumpable booléen

Défini l'indicateur de processus dumpable (PR_SET_DUMPABLE prctl) même si l'utilisateur ou le groupe de processus est différent de l'utilisateur du processus maître. Il permet de créer un core dump du processus et ptrace le processus pour l'utilisateur de pool. Valeur par défaut : no. Depuis PHP 7.0.29, 7.1.17 et 7.2.5.

prefix chaîne de caractères

Spécifier le préfixe pour l'évaluation du chemin

request_terminate_timeout_track_finished bool

Le timeout défini par request_terminate_timeout n'est pas engagé après un fastcgi_finish_request ou lorsque l'application s'est terminée et que les fonctions internes d'arrêt sont appelées. Cette directive permet d'appliquer la limite de temps sans condition. Valeur par défaut : no. À partir de PHP 7.3.0.

request_terminate_timeout mixed

Le timeout pour servir une requête après lequel le processus concerné sera tué. Cette option devrait être utilisée lorsque l'option 'max_execution_time' n'arrête pas l'exécution du script pour une raison quelconque. Une valeur de '0' signifie 'Off'. Unités disponibles : s(econdes)(défaut), m(inutes), h(eures), ou d(ays). Par défaut : 0.

request_slowlog_timeout mixed

Le timeout pour servir une requête dans laquelle la backtrace PHP sera vidée dans le fichier 'slowlog'. Une valeur de '0' signifie 'Off'. Unités disponibles : s(econdes)(défaut), m(inutes), h(eures), ou d(ays). Par défaut : 0.

request_slowlog_trace_depth int

Le niveau de profondeur de la trace de la pile de log slowlog. Valeur par défaut : 20. À partir de PHP 7.2.0.

slowlog chaîne de caractères

Le journal pour les requêtes lentes, par défaut: #INSTALL_PREFIX#/log/php-fpm.log.slow.

rlimit_files entier

Affecte la rlimit pour les descripteurs de fichiers ouverts des processus enfants de ce pool. Valeur par défaut : valeur du système.

rlimit_core entier

Affecte la taille maximale de rlimit des processus enfants de ce pool. Valeurs possibles : 'unlimited' ou un entier plus grand ou égal à 0. Valeur par défaut : valeur définie par le système.

chroot chaîne de caractères

Chroot vers ce dossier au démarrage. Cette valeur doit être un chemin absolu. Si cette valeur n'est pas définie, chroot n'est pas utilisé.

chdir chaîne de caractères

Chdir vers ce dossier au démarrage. Cette valeur doit être un chemin absolu. Valeur par défaut : dossier courant ou / si chroot.

catch_workers_output booléen

Redirige stdout et stderr vers le journal d'erreur principal. Si non précisé, stdout et stderr seront redirigés vers /dev/null selon les specifications FastCGI. Valeur par défaut: no.

decorate_workers_output booléen

Active la décoration de sortie pour les travailleurs de sortie quand catch_workers_output est activé. Valeur par défaut : yes. Disponible à partir de PHP 7.3.0.

clear_env booléen

Nettoie l’environnent des agents FPM. Prévient que des variables d’environnement arbitraire puissent atteindre les processus FPM par le nettoyage de l'environnement de ces agents avant que les variables d’environnement spécifié dans la configuration du pool ne soient ajoutées.

security.limit_extensions chaîne de caractères

Limite les extensions que le script principal FPM va être autorisé à analyser. Ceci peut prévenir les erreurs de configuration coté serveur. Vous pouvez limiter FPM à exécuter seulement les extensions .php pour prévenir que des utilisateurs malicieux utilisent d'autres extensions pour exécuter du code. Valeur par défaut : .php .phar

apparmor_hat string

Si AppArmor est activé, permet de changer un hat (chapeau). Valeur par défaut : non défini

access.log chaîne de caractères

Le fichier journal d'accès. Valeur par défaut : non définie

access.format chaîne de caractères

Le format du journal d'accès. Valeur par défaut : "%R - %u %t \"%m %r\" %s":

Options valide
Placeholder Description
%C %CPU
%d durée µs
%e fastcgi env
%f script
%l content length
%m method
%M memory
%n pool name
%o header output
%p PID
%q query string
%Q la "colle" entre %q et %r
%r requête URI
%R adresse IP remote
%s statut
%T time
%t time
%u remote user

Il est possible de passer des variables d'environnement additionnelles et mettre à jour les paramètres de PHP d'un pool. Pour ce faire, vous devez ajouter les options suivantes au fichier de configuration de la file d'attente.

Exemple #1 Passer des variables d'environnement et des paramètres PHP à un pool

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
Les paramètres PHP passés avec php_value ou php_flag écraseront leur valeur précédente. Notez que définir disable_functions ou disable_classes n'écrasera pas les valeurs concernées précédemment définies dans php.ini, mais rajouteront les valeurs à la suite des anciennes.

Les paramètres définis avec php_admin_value et php_admin_flag ne peuvent être surchargés via ini_set().

Les paramètres de PHP peuvent être définis dans le serveur web.

Exemple #2 Définit les paramètres PHP dans le fichier 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";
Attention

En raison du fait que ces configurations sont passées à php-fpm comme en-têtes fastcgi, php-fpm ne doit pas être relié directement au web et ainsi y être directement accessible. Sinon, tout le monde pourra altérer les options de configuration de PHP. Voir aussi l'option listen.allowed_clients.

Note: Les pools ne sont pas un mécanisme de sécurité, car elles ne fournissent pas une séparation totale ; par exemple toutes les pools utiliserait une seule instance OPcache.

add a note add a note

User Contributed Notes 13 notes

up
4
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
22
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 'index' 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
17
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
4
rob at librobert dot net
3 years ago
Correction for my previous note...

I wrote "The 'index' directive that is used in php-fpm.conf".

But obviously I meant "The 'include' directive"...
up
10
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
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
1
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
up
0
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
0
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
Yousef Ismaeil Cliprz
10 years ago
Check if fastCGI enabled

<?php
// You can use isset or is_null for $_SERVER['FCGI_SERVER_VERSION']
function isFastCGI () {
    return !
is_null($_SERVER['FCGI_SERVER_VERSION']);
}

?>
up
-7
sroussey at gmail dot com
11 years ago
Starting in 5.3.9 the security.limit_extensions configuration item has been added and it defaults to .php. If you need to execute other extensions, you have to change this setting.
up
-18
mb
9 years ago
If you need to disable security.limit_extensions variable, simply set the variable to FALSE like so:

security.limit_extensions = FALSE
To Top