题 用另一个文件覆盖php-fpm池配置值


必须自定义新服务器的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上也是如此。


5
2017-09-27 16:02




至少在基于Debian / Ubuntu的发行版中,升级过程询问是否应保留旧配置文件或从包中安装升级配置文件。它将安装带有后缀的新配置文件,以便可以通过这种方式检查更改。我假设其他包管理器具有类似的功能。因此,我认为这是一个意见问题。但是,具有相同名称的池定义也不会像将来那样有效。 - Tero Kilkanen


答案:


无法从其他来源找到“官方”确认,但这是在做了一些研究之后的一些结果:

分析源代码 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,保持分布不变,并添加名称按字母顺序大于打包的自定义文件,其中包含必须更改的少数选项。


8
2017-10-01 16:08



+1表示不更改默认配置。当我将它用于生产环境时,我总是遇到麻烦,因为它在升级时会恢复为默认值。 - Federico Galli


如果您有一些像php-overrides.ini这样的文件,您应该将其复制到

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

99前缀是由于执行顺序


2
2018-04-16 11:19