15 votes

Remplacer les valeurs de configuration du pool php-fpm par un autre fichier

Devoir personnaliser la configuration du pool php-fpm d'un nouveau serveur, je me demande s'il est possible / autorisé / recommandé d'avoir un nouveau fichier de pool, dont le nom vient alphabétiquement après l'original, et qui contient uniquement des valeurs qui remplacent la configuration initiale.

La configuration originale se trouve dans /etc/php/7.0/fpm/pool.d nommé www.conf.

Il semble, d'après les pages liées à l'installation, que les ingénieurs modifient directement l'original (en sauvegardant une copie des valeurs initiales). Par exemple

[www]
...
user www-data
group www-data
pm.max_children 2

donne après modification

[www]
...
user myapp         ; était www-data
group myapp        ; était www-data
pm.max_children 8  ; était 2

Mais il semble que cette tâche devrait être répétée après la prochaine mise à jour de php-fpm (d'autant plus que la configuration se trouve dans un chemin 7.0, cela est inquiétant).

Au lieu de modifier le fichier original, je voudrais le laisser intact et en ajouter un autre, disons wwwmyapp.conf qui déclarerait le même pool, et aurait uniquement les valeurs qui ont changé

dans wwwmyapp.conf

[www]        ; même pool!
user myapp
group myapp
pm.max_children 8

dans pool.d, liste des fichiers

www.conf
wwwmyapp.conf

puisque dans php-fpm.conf tous les fichiers de configuration de pool sont chargés, les valeurs de wwwmyapp seront lues après celles de www (dans le même pool www) et devraient remplacer les premières valeurs.

  • Cela semble fonctionner dans quelques tests et aucun erreur n'a été signalée, mais est-ce que cela fonctionnera tout le temps et pour toutes les valeurs ?
  • Devrions-nous écraser le fichier de configuration directement à la place ?

Je n'ai pas trouvé de réponse dans aucun document, même sur php.net.

24voto

Déjà vu Points 5368

Impossible de trouver une confirmation "officielle" provenant d'une autre source, mais voici quelques résultats après avoir effectué des recherches :

En analysant le code source de php7.0-fpm et plus spécifiquement fpm-conf.c, il apparaît que

  • le fichier de configuration principal php-fpm.conf est lu en premier [ fpm_conf_load_ini_file() ],
  • toutes les directives include sont lues dans l'ordre, fournissant une liste de fichiers grâce à glob(),
  • chaque fichier est analysé par la même fonction fpm_conf_load_ini_file(),
  • une entrée dans le fichier écrase toute valeur définie précédemment,
  • tout nouveau include entraînera un appel récursif à la fonction de traitement des inclusions, et
  • la fonction glob() trie les noms, par défaut (pas d'option GLOB_NOSORT)

Ainsi, on peut supposer - du moins dans cette version mais il est peu probable que cela change bientôt compte tenu du code actuel - qu'il est prudent de ranger les fichiers de configuration du répertoire pool.d dans l'ordre alphabétique ; toute valeur précédemment enregistrée étant écrasée par une entrée avec le même nom lue après.

Nous avons une manière propre de gérer les fichiers de configuration pour php-fpm, en laissant intacts ceux de la distribution, et en ajoutant des fichiers personnalisés ayant un nom alphabétiquement supérieur à ceux empaquetés, contenant les quelques options qui doivent être modifiées.

3voto

rovyko Points 1048

Si vous avez un fichier tel que php-overrides.ini, vous devriez le copier dans

/etc/php/7.0/fpm/conf.d/99-overrides.ini

Le préfixe 99 est dû à l'ordre d'exécution

2voto

JesusIniesta Points 111

Remplacement des valeurs du pool [www] via des fichiers de configuration personnalisés .conf:

Il est possible, et l'explication de @breaking-not-so-bad sur la façon dont les fichiers de configuration sont chargés est excellente, je vous recommande de la lire en premier.

Mais il vaut vraiment la peine d'insister sur l'importance du nommage des fichiers de configuration (car cela peut être délicat):

Comme l'a expliqué @hroj3e et comme l'a exemplifié @istranger dans les commentaires ci-dessus

  • Si le nom de pool par défaut est www, le seul moyen de le remplacer est d'utiliser des noms de fichiers dans pool.d comme wwwsomething ou commençant par x, y ou z - @hroj3e
  • Nommé le fichier z-www-overrides.conf et il remplace les options du pool [www] - @istranger

Un exemple:

Créer un fichier /etc/php/7.0/fpm/conf.d/z-www-overrides.conf remplacera les paramètres dans php-fpm.conf:

[www]
user myapp
group myapp
pm.max_children 8

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X