FPM utilise la syntaxe php.ini pour son fichier de configuration - php-fpm.conf ainsi que les fichiers de configuration du pool.
pid
string
Chemin vers le fichier PID. Par défaut : none.
error_log
string
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
string
Niveau de journalisation d'erreur. Valeurs possibles : alert, error, warning, notice, debug. Par défaut : notice.
log_limit
int
Limite de journalisation pour les lignes enregistrées qui permet de journaliser des messages de plus de 1024 caractères sans découpage. Valeur par défaut : 1024 Disponible à partir de PHP 7.3.0.
log_buffering
bool
Journalisation expérimentale sans tampon supplémentaire. Valeur par défaut : yes. Disponible à partir de PHP 7.3.0.
syslog.facility
string
Utilisé pour spécifier quel type de programme écrit le message. Valeur par défaut : daemon.
syslog.ident
string
Ajoute au début de chaque message. En cas de multiples instances FPM s'exécutant sur le même serveur, il est possible de changer la valeur par défaut afin qu'elle convienne aux besoins. Valeur par défaut : php-fpm.
emergency_restart_threshold
int
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 déterminer 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 accélérateur. Unités disponibles :
s(econdes), m(inutes), h(eures), ou j(ours).
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 j(ours) Unité par défaut : secondes. Valeur par défaut : 0.
process.max
int
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
int
Définit 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
Envoie FPM en arrière-plan. Mettre 'no' pour garder FPM au premier plan lors du débogage. Valeur par défaut : yes.
rlimit_files
int
Définit 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
int
Définit la taille maximale de rlimit pour le processus principal. Valeur par défaut : 0.
events.mechanism
string
Spécifie le gestionnaire d’événement que FPM va utiliser. Les options suivantes sont disponibles: epoll, kqueue (*BSD), port (Solaris), poll, select. Valeur par défaut : non définie (détection automatique privilégiant epoll et kqueue).
systemd_interval
int
Quand FPM est construit avec le support de systemd, spécifie l'intervalle en seconde, entre les notifications de rapport de santé envoyées à systemd. Définir à 0 pour désactiver. Valeur par défaut : 10.
Avec FPM il est possible d'exécuter plusieurs pools de processus avec des paramètres différents. Voici les paramètres qui peuvent être ajustés par pool.
listen
string
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
int
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
string
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
string
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
string
Voir listen.owner.
listen.mode
string
Voir listen.owner.
listen.acl_users
string
Quand les listes de contrôle d'accès POSIX sont supportées, il est possible de 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
string
Voir listen.acl_users.
La valeur est une liste de noms de groupes séparés par des virgules.
listen.setfib
int
Définit la table de routage associée (FIB). FreeBSD uniquement.
Valeur par défaut : -1. À partir de PHP 8.2.0.
user
string
Utilisateur Unix des processus FPM. Cette option est obligatoire.
group
string
Groupe Unix des processus FPM. Si non précisé, le groupe de l'utilisateur est utilisé.
pm
string
Choisit 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
int
pm est réglé sur
static. Nombre maximum de processus fils à créer lorsque
pm est réglé sur dynamic ou ondemand.
Option obligatoire.
Cette option affecte la limite du nombre de requêtes simultanées qui seront servies. Équivalent à ApacheMaxClients avec mpm_prefork et à PHP_FCGI_CHILDREN dans l'implémentation originale de FastCGI de PHP.
pm.start_servers
int
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) / 2.
pm.min_spare_servers
int
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
int
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.
Valeur par défaut : 32
pm.process_idle_timeout
mixed
Nombre de secondes après lesquelles un processus inactif sera tué.
Utilisé uniquement quand pm est défini à
ondemand.
Unités disponibles : s (secondes)(par défaut), m (minutes), h (heures), ou d (jours).
Valeur par défaut : 10s.
pm.max_requests
int
Nombre de requêtes que chaque processus fils devrait exécuter avant de renaître. Ceci peut être utile pour contourner des fuites mémoires dans des bibliothèques tierces. Pour un traitement sans fin des requêtes, précisez '0'. Équivalent à 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 la page de statut de FPM avant qu'elles ne soient terminées. La syntaxe est la même que pour la directive listen. Valeur par défaut : none.
pm.status_path
string
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 que page de statut. Valeur par défaut : none.
ping.path
string
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. Il est à noter que la valeur doit commencer par un slash (/).
ping.response
string
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
int
Spécifier 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
Définit 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. À partir de PHP 7.0.29, 7.1.17 et 7.2.5.
prefix
string
Spécifier le préfixe pour l'évaluation du chemin
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 j(ours). Par défaut : 0.
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_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 j(ours). 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
string
Le journal pour les requêtes lentes, par défaut :
#INSTALL_PREFIX#/log/php-fpm.log.slow.
rlimit_files
int
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
int
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
string
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
string
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
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 spécifications FastCGI. Valeur par défaut : no.
decorate_workers_output
bool
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
Nettoie l’environnement des agents FPM. Prévient que des variables d’environnement arbitraires puissent atteindre les processus FPM par le nettoyage de l’environnement de ces agents avant que les variables d’environnement spécifiées dans la configuration du pool ne soient ajoutées. Valeur par défaut : Yes.
security.limit_extensions
string
Limite les extensions que le script principal FPM va être autorisé à analyser. Ceci peut prévenir les erreurs de configuration côté serveur. Il est recommandé de limiter FPM aux extensions .php uniquement pour empêcher des utilisateurs malveillants d'utiliser d'autres extensions pour exécuter du code PHP. 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
string
Le fichier journal d'accès. Valeur par défaut : non définie
access.format
string
Le format du journal d'accès.
Valeur par défaut : "%R - %u %t \"%m %r\" %s":
| Placeholder | Description |
|---|---|
%%
|
Le caractère % |
%C
|
%CPU utilisé par la requête. Les formats suivants sont acceptés :
%{user}C pour la CPU utilisateur uniquement,
%{system}C pour la CPU système uniquement,
%{total}C pour la CPU utilisateur + système (par défaut)
|
%d
|
Temps pris pour traiter la requête.
Les formats suivants sont acceptés pour la précision :
%{seconds}d (par défaut), %{milliseconds}d,
%{microseconds}d
|
%{name}e
|
Une variable d'environnement (identique à $_ENV ou $_SERVER).
Un nom de variable doit être spécifié entre accolades pour indiquer le nom de la variable d'environnement.
Par exemple, des informations spécifiques au serveur comme %{REQUEST_METHOD}e ou
%{SERVER_PROTOCOL}e, des en-têtes HTTP tels que
%{HTTP_HOST}e ou %{HTTP_USER_AGENT}e
|
%f
|
Nom du fichier script |
%l
|
Content-Length de la requête (pour les requêtes HTTP POST uniquement)
|
%m
|
Méthode HTTP de la requête |
%M
|
Pic de mémoire allouée par PHP.
Accepte les formats suivants :
%{bytes}M (défaut), %{kilobytes}M
%{kilo}M, %{megabytes}M,
%{mega}M
|
%n
|
Nom du pool |
%{name}o
|
En-tête de sortie. Le nom de l'en-tête doit être spécifié entre accolades.
Par exemple : %{Content-Type}o,
%{X-Powered-By}o, %{Transfer-Encoding}o
|
%p
|
PID de l'enfant qui a traité la demande |
%P
|
PID du parent de l'enfant qui a traité la demande |
%q
|
Chaîne de requête |
%Q
|
Le caractère '?', ou le lien entre %q et %r,
si la chaîne de requête existe
|
%r
|
URI de la requête sans la chaîne de requête,
voir %q et %Q
|
%R
|
Adresse IP distante |
%s
|
Statut (code de réponse) |
%t
|
Heure du serveur à laquelle la requête a été reçue. Elle peut
accepter un format strftime(3) :
%d/%b/%Y:%H:%M:%S %z (par défaut).
Le format strftime(3) doit être encapsulé dans
une balise %{<strftime_format>}t, par exemple, pour une chaîne de temps au format ISO8601, utiliser :
%{%Y-%m-%dT%H:%M:%S%z}t
|
%T
|
Heure à laquelle le log a été écrit (lorsque la requête s'est terminée). Elle peut accepter un
format strftime(3) :
%d/%b/%Y:%H:%M:%S %z (par défaut).
Le format strftime(3) doit être encapsulé dans une
balise %{<strftime_format>}T, par exemple, pour une chaîne de temps au format ISO8601, utiliser :
%{%Y-%m-%dT%H:%M:%S%z}T
|
%u
|
Utilisateur d'authentification basique, si spécifié dans l'en-tête Authorization |
access.suppress_path
array
Une liste de valeurs request_uri qui devraient être filtrées du journal d'accès. Valeur par défaut : non définie. À partir de PHP 8.2.0.
Il est possible de passer des variables d'environnement additionnelles et mettre à jour les paramètres de PHP d'un pool. Pour ce faire, il faut ajouter les options suivantes au fichier de configuration du pool.
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
php_value ou
php_flag écraseront leur valeur précédente.
Il est à noter que définir
disable_functions 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";
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 ils ne fournissent pas une séparation totale ; par exemple tous les pools utiliseraient une seule instance OPcache.