Переопределить значения конфигурации пула php-fpm другим файлом

12

При необходимости настроить конфигурацию пула php-fpm для нового сервера, мне интересно, возможно ли / разрешено / рекомендовано иметь новый файл пула, имя которого идет в алфавитном порядке после исходного, который имеет только значения, которые переопределяют исходную конфигурацию.

Оригинальная конфигурация в /etc/php/7.0/fpm/pool.dназванном www.conf.

Кажется, согласно страницам, связанным с установкой, инженеры изменяют непосредственно оригинал (сохраняя копию начальных значений). Например

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

дает после модификации

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

Но кажется, что это может быть задачей, которую нужно повторить после следующего обновления php-fpm (более того, конфигурация находится в 7.0пути, это беспокоит).

Вместо того, чтобы изменять исходный файл, я хотел бы оставить его без изменений и добавить еще один, скажем, wwwmyapp.confчто он объявит тот же пул, и будет иметь только те значения, которые изменились

в wwwmyapp.conf

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

в pool.d, список файлов

www.conf
wwwmyapp.conf

поскольку во php-fpm.confвсех пулах загружаются файлы conf, значения wwwmyappбудут считываться после значений www(в том же wwwпуле) и должны переопределять первые значения.

  • Похоже, что он работает в нескольких тестах и ​​не сообщается об ошибке, но будет ли он работать постоянно и для всех значений?
  • Должны ли мы перезаписать файл конфигурации напрямую?

Не удалось найти ответ ни в одном документе, даже на php.net.

Кольцо Ø
источник
По крайней мере, в дистрибутивах на основе Debian / Ubuntu процесс обновления спрашивает, следует ли сохранить старые файлы конфигурации или установить обновленные файлы из пакета. Он установит новый файл конфигурации с суффиксом, чтобы можно было проверить изменения таким образом. Я предполагаю, что другие менеджеры пакетов имеют аналогичную функцию. Поэтому я думаю, что это вопрос мнения. Тем не менее, слишком много определений пула с тем же именем не будет работать в будущем.
Теро Килканен

Ответы:

15

Не удалось найти «официальное» подтверждение из другого источника, но вот некоторые результаты после некоторого исследования:

Анализируя исходный код php7.0-fpmи, более конкретно fpm-conf.c, кажется, что

  • основной файл конфигурации php-fpm.confчитается первым [ fpm_conf_load_ini_file ()],
  • все includeдирективы читаются по порядку, давая список файлов благодаря glob () ,
  • каждый файл анализируется одним и тем же fpm_conf_load_ini_file (),
  • запись в файле перезаписывает любое ранее установленное значение,
  • любой новый includeбудет иметь рекурсивный вызов функции обработки включений, и
  • Glob () функция сортирует имена, по умолчанию (не GLOB_NOSORTопция)

Таким образом, мы можем предположить - по крайней мере, в этой версии, но это вряд ли скоро изменится, учитывая существующий код - что безопасно расположить pool.dфайлы конфигурации каталогов в алфавитном порядке; любое ранее записанное значение перезаписывается записью с тем же именем, прочитанной после.

У нас есть простой способ обрабатывать файлы конфигурации php-fpm, не затрагивая дистрибутивные файлы, и добавляя пользовательские файлы, имена которых в алфавитном порядке больше, чем упакованные, которые содержат несколько параметров, которые необходимо изменить.

Кольцо Ø
источник
+1 за отсутствие изменения конфигурации по умолчанию. У меня всегда возникают проблемы, когда я использую его для производственной среды, потому что при обновлении он возвращается к настройкам по умолчанию.
Федерико Галли
глобальные переопределения FPM в файле pool.d возможно с использованием [global]раздела. например emergency_restart_threshold. Протестировано на php7.1-fpm Ubuntu (сервер 18).
hrvoj3e
Кроме того, поскольку имя пула по умолчанию является wwwединственным способом переопределения, используется имя файла pool.d, например, wwwsomethingили начинающееся с x, yили z.
hrvoj3e
Спасибо! Я назвал свой файл, z-www-overrides.confи он переопределяет [www]параметры пула!
IStranger
2

В случае, если у вас есть какой-либо файл, например php-overrides.ini, вы должны скопировать его в

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

99 префикс связан с порядком исполнения

WhipsterCZ
источник
conf.dПереопределение не может переопределить php-fpm.confпеременные (только в pool.d/Under [global]) (примечание к будущей самостоятельной)
hrvoj3e