Zastąp wartości konfiguracji puli php-fpm innym plikiem

12

Musząc dostosować konfigurację puli php-fpm nowego serwera, zastanawiam się, czy jest możliwe / dozwolone / zalecane posiadanie nowego pliku puli, którego nazwa idzie alfabetycznie po oryginalnym, który ma tylko wartości zastępujące początkową konfigurację.

Oryginalna konfiguracja ma /etc/php/7.0/fpm/pool.dnazwę www.conf.

Wydaje się, że zgodnie ze stronami związanymi z instalacją inżynierowie modyfikują bezpośrednio oryginał (zapisując kopię wartości początkowych). Na przykład

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

daje po modyfikacji

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

Wygląda jednak na to, że zadanie może być powtórzone po kolejnej aktualizacji php-fpm (co więcej, konfiguracja jest na dobrej 7.0drodze, to niepokojące).

Zamiast modyfikować oryginalny plik, chciałbym zachować go bez zmian i dodać kolejny, powiedzmy wwwmyapp.conf, że zadeklaruje tę samą pulę i mając tylko te wartości, które uległy zmianie

w wwwmyapp.conf

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

w pool.d, lista plików

www.conf
wwwmyapp.conf

ponieważ we php-fpm.confwszystkich plikach conf puli są ładowane, wartości wwwmyappzostaną odczytane po wartościach z www(w tej samej wwwpuli) i powinny zastąpić pierwsze wartości.

  • Wygląda na to, że działa w kilku testach i nie zgłoszono błędu, ale czy będzie działał przez cały czas i dla wszystkich wartości?
  • Czy zamiast tego powinniśmy zastąpić plik konfiguracyjny bezpośrednio?

Nie można znaleźć odpowiedzi w żadnym dokumencie, nawet na php.net.

Pierścień Ø
źródło
Przynajmniej w dystrybucjach opartych na Debianie / Ubuntu proces aktualizacji pyta, czy powinien zachować stare pliki konfiguracyjne, czy zainstalować zaktualizowane pliki z pakietu. Zainstaluje nowy plik konfiguracyjny z przyrostkiem, aby w ten sposób sprawdzić zmiany. Zakładam, że inni menedżerowie pakietów mają podobną funkcję. Dlatego myślę, że to kwestia opinii. Jednak zbyt duże definicje puli o tej samej nazwie nie brzmią tak, jakby działały w przyszłości.
Tero Kilkanen

Odpowiedzi:

15

Nie można znaleźć „oficjalnego” potwierdzenia z innego źródła, ale oto wyniki po przeprowadzeniu badań:

Analizując kod źródłowy, php7.0-fpma dokładniej fpm-conf.c, wydaje się, że

  • główny plik konfiguracyjny php-fpm.confjest najpierw czytany [ fpm_conf_load_ini_file ()],
  • wszystkie includedyrektywy są odczytywane w kolejności, dając listę plików dzięki glob () ,
  • każdy plik jest analizowany przez ten sam plik fpm_conf_load_ini_file (),
  • wpis w pliku zastępuje wcześniej ustawioną wartość,
  • wszelkie nowe includebędą miały rekurencyjne wywołanie funkcji przetwarzania, a także
  • funkcja glob () domyślnie sortuje nazwy (brak GLOB_NOSORTopcji)

Możemy zatem założyć - przynajmniej w tej wersji, ale prawdopodobnie nie zmieni się to szybko, biorąc pod uwagę obecny kod - że bezpiecznie jest uporządkować pool.dpliki konfiguracji katalogów w kolejności alfabetycznej; wszelkie wcześniej zarejestrowane wartości zostaną zastąpione wpisem o tej samej nazwie, odczytanym po.

Mamy czysty sposób na obsługę plików konfiguracyjnych php-fpm, utrzymywanie nietkniętych plików dystrybucyjnych i dodawanie niestandardowych plików o alfabetycznie większej nazwie niż w pakietach, które zawierają kilka opcji, które należy zmienić.

Pierścień Ø
źródło
+1 za brak zmiany domyślnej konfiguracji. Zawsze mam problemy, gdy używam tego w środowisku produkcyjnym, ponieważ podczas aktualizacji zostaje przywrócony do ustawień domyślnych.
Federico Galli
globalne przesłonięcia FPM w puli. d są możliwe przy użyciu [global]sekcji. np emergency_restart_threshold. Testowane na Ubuntu php7.1-fpm (serwer 18).
hrvoj3e
Ponadto, ponieważ domyślna nazwa puli jest wwwjedynym sposobem na przesłonięcie przy użyciu pool.d nazw plików takich jak wwwsomethinglub zaczynających się x, ylub z.
hrvoj3e
Dzięki! z-www-overrides.confNazwałem mój plik i zastąpił on [www]opcje puli!
IStranger
2

Jeśli masz jakiś plik, taki jak php-overrides.ini, powinieneś go skopiować

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

99 prefiks wynika z kolejności wykonania

WhipsterCZ
źródło
conf.dprzesłonięcia nie mogą przesłonić php-fpm.confzmiennych (tylko pool.d/poniżej [global]) (uwaga dla przyszłego ja)
hrvoj3e