Override php-fpm pool config values with another file

configurationphp-fpmpool

Having to customize the php-fpm pool configuration of a new server, I wonder if it is possible / allowed / recommended to have a new pool file, which name goes alphabetically after the original one, which only has values that override the initial configuration.

The original configuration is in /etc/php/7.0/fpm/pool.d named www.conf.

It seems, according to the pages related to the installation, engineers modify directly the original (saving a copy of the initial values). E.g.

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

gives after modification

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

But it seems that could be a task to be repeated after the next upgrade of php-fpm (furthermore the configuration is in a 7.0 path, that's worrying).

Instead of modifying the original file, I would like to keep it unchanged, and add another one, say wwwmyapp.conf that would declare the same pool, and having only the values that have changed

in wwwmyapp.conf

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

in pool.d, list of files

www.conf
wwwmyapp.conf

since in php-fpm.conf all pool conf files are loaded, the values of wwwmyapp will be read after the ones of www ( in the same www pool ) and should override the first values.

  • It seems to work in a few tests and no error reported, but will it work all the time, and for all values?
  • Should we overwrite the config file directly instead?

Couldn't find an answer in any doc, even on php.net.

Best Answer

Could not find an "official" confirmation from another source, but here is some outcome after doing some research:

Analyzing the source code of php7.0-fpm and more specifically fpm-conf.c, it appears that

  • the main configuration file php-fpm.conf is read first [ fpm_conf_load_ini_file() ],
  • all include directives are read in order, giving a list of files thanks to glob(),
  • each of the file is parsed by the same fpm_conf_load_ini_file(),
  • an entry in the file overwrites any previously set value,
  • any new include will have a recursive call to the includes processing function, and
  • the glob() function sorts names, by default (no GLOB_NOSORT option)

Thus we can assume - at least in this version but this is unlikely to change soon considering the present code - that it is safe to arrange the pool.d directory configuration files in alphabetical order ; any previously recorded value being overwritten by an entry with the same name read after.

We have a clean way to handle configuration files for php-fpm, keeping the distribution ones untouched, and adding custom files having name alphabetically greater than the packaged ones, that contain the few options that have to be changed.