用另一个文件覆盖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的发行版中,升级过程会询问是否保留旧的配置文件或从软件包中安装升级的文件。它将安装带有后缀的新配置文件,以便人们可以通过这种方式检查更改。我假设其他程序包管理器也具有类似的功能。因此,我认为这是一个见解。但是,使用相同的名称定义池也听起来并不可行。
Tero Kilkanen

Answers:


15

找不到其他来源的“官方”确认,但是经过一些研究后,这是一些结果:

分析的源代码,php7.0-fpm更具体地说fpm-conf.c,似乎

  • php-fpm.conf首先读取主要配置文件[ fpm_conf_load_ini_file()],
  • 所有include指令均按顺序读取,这要感谢glob()来提供文件列表,
  • 每个文件都由相同的fpm_conf_load_ini_file()解析,
  • 文件中的条目会覆盖以前设置的任何值,
  • 任何新的include都将递归调用include处理函数,并且
  • 水珠()函数对名称,默认情况下(无GLOB_NOSORT选项)

因此我们可以假定-至少在这个版本中,但是考虑到当前的代码,这不可能很快改变-以pool.d目录字母顺序排列目录配置文件是安全的; 任何先前记录的值将被读取后具有相同名称的条目覆盖。

我们有一种干净的方法来处理的配置文件php-fpm,使分发文件保持不变,并添加名称按字母顺序比打包文件大的自定义文件,其中包含一些必须更改的选项。


+1用于不更改默认配置。在生产环境中使用该软件时,我总是会遇到麻烦,因为升级时它将恢复为默认设置。
Federico Galli '18

pool.d下的全局FPM覆盖是使用[global]节。例如emergency_restart_threshold。在php7.1-fpm ubuntu(服务器18)上进行了测试。
hrvoj3e

同时,由于默认池名称是www重写的唯一方法是使用pool.d文件名状wwwsomething或启动xyz
hrvoj3e

谢谢!我已经命名了文件,z-www-overrides.conf并且它覆盖了[www]池选项!
IStranger

2

如果您有类似php-overrides.ini的文件,则应将其复制到

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

99前缀是由于执行顺序


conf.d覆盖不能覆盖php-fpm.conf变量(仅在pool.d/下面[global](注意未来自身)
hrvoj3e
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.