Überschreiben Sie die Konfigurationswerte des PHP-Fpm-Pools mit einer anderen Datei

11

Nachdem ich die php-fpm-Poolkonfiguration eines neuen Servers anpassen muss, frage ich mich, ob es möglich / erlaubt / empfohlen ist, eine neue Pooldatei zu haben, deren Name alphabetisch nach der ursprünglichen Datei steht und die nur Werte enthält, die die ursprüngliche Konfiguration überschreiben.

Die ursprüngliche Konfiguration ist /etc/php/7.0/fpm/pool.dbenannt www.conf.

Laut den Seiten, die sich auf die Installation beziehen, scheinen die Ingenieure das Original direkt zu ändern (indem sie eine Kopie der Anfangswerte speichern). Z.B

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

gibt nach Änderung

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

Aber es scheint, dass dies eine Aufgabe sein könnte, die nach dem nächsten Upgrade von php-fpm wiederholt werden muss (außerdem befindet sich die Konfiguration in einem 7.0Pfad, der besorgniserregend ist).

Anstatt die Originaldatei zu ändern, möchte ich sie unverändert lassen und eine weitere hinzufügen, beispielsweise wwwmyapp.confdenselben Pool deklarieren und nur die geänderten Werte haben

im wwwmyapp.conf

[www]        ; same pool!
user myapp
group myapp
pm.max_children 8

in pool.d, Liste der Dateien

www.conf
wwwmyapp.conf

Da in php-fpm.confallen Pool-Conf-Dateien geladen werden, werden die Werte von wwwmyappnach denen von www(im selben wwwPool) gelesen und sollten die ersten Werte überschreiben.

  • Es scheint in ein paar Tests zu funktionieren und es wurde kein Fehler gemeldet, aber wird es die ganze Zeit und für alle Werte funktionieren?
  • Sollten wir stattdessen die Konfigurationsdatei direkt überschreiben?

Konnte in keinem Dokument eine Antwort finden, auch nicht auf php.net.

Ring Ø
quelle
Zumindest in Debian / Ubuntu-basierten Distributionen fragt der Upgrade-Prozess, ob die alten Konfigurationsdateien beibehalten oder aktualisierte aus dem Paket installiert werden sollen. Die neue Konfigurationsdatei wird mit einem Suffix installiert, sodass die Änderungen auf diese Weise überprüft werden können. Ich gehe davon aus, dass andere Paketmanager eine ähnliche Funktion haben. Daher denke ich, dass es eine Ansichtssache ist. Zu Pooldefinitionen mit demselben Namen zu haben, klingt jedoch nicht so, als würde es auch in Zukunft funktionieren.
Tero Kilkanen

Antworten:

14

Konnte keine "offizielle" Bestätigung aus einer anderen Quelle finden, aber hier ist ein Ergebnis nach einigen Recherchen:

Wenn man den Quellcode von php7.0-fpmund genauer analysiert fpm-conf.c, scheint es, dass

  • Die Hauptkonfigurationsdatei php-fpm.confwird zuerst gelesen [ fpm_conf_load_ini_file ()],
  • Alle includeRichtlinien werden in der Reihenfolge, so dass eine Liste von Dateien dank lesen glob () ,
  • Jede Datei wird von derselben fpm_conf_load_ini_file () analysiert.
  • Ein Eintrag in der Datei überschreibt alle zuvor festgelegten Werte.
  • Jeder neue includehat einen rekursiven Aufruf der Includes-Verarbeitungsfunktion und
  • Die Funktion glob () sortiert standardmäßig Namen (keine GLOB_NOSORTOption).

Daher können wir - zumindest in dieser Version, aber angesichts des vorliegenden Codes wird sich dies wahrscheinlich nicht bald ändern - davon ausgehen, dass es sicher ist, die pool.dVerzeichniskonfigurationsdateien in alphabetischer Reihenfolge anzuordnen . Jeder zuvor aufgezeichnete Wert wird durch einen Eintrag mit demselben Namen überschrieben, der danach gelesen wird.

Wir haben eine saubere Möglichkeit, Konfigurationsdateien zu verwalten php-fpm, die Verteilungsdateien unberührt zu lassen und benutzerdefinierte Dateien hinzuzufügen, deren Name alphabetisch größer ist als die gepackten, die die wenigen Optionen enthalten, die geändert werden müssen.

Ring Ø
quelle
+1, wenn die Standardkonfiguration nicht geändert wird. Ich habe immer Probleme, wenn ich diese für die Produktionsumgebung verwende, da sie beim Upgrade auf die Standardeinstellungen zurückgesetzt wird.
Federico Galli
Globale FPM-Überschreibungen unter pool.d können mit [global]section verwendet werden. zB emergency_restart_threshold. Getestet auf php7.1-fpm Ubuntu (Server 18).
hrvoj3e
Auch, weil Standard - Poolnamen sind wwwder einzige Weg zur Überschreibung verwendet pool.d Dateinamen wie wwwsomethingoder beginnend mit x, yoder z.
hrvoj3e
2

Falls Sie eine Datei wie php-overrides.ini haben, sollten Sie diese kopieren

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

Das Präfix 99 ist auf die Ausführungsreihenfolge zurückzuführen

WhipsterCZ
quelle
conf.dÜberschreibungen können php-fpm.confVariablen nicht überschreiben (nur in pool.d/unter [global]) (Hinweis für das zukünftige Selbst)
hrvoj3e