Override php-fpm pool config values with another file
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.
Solution 1:
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.
Solution 2:
In case u have some file like php-overrides.ini you should copy it to
/etc/php/7.0/fpm/conf.d/99-overrides.ini
99 prefix is due to order of execution