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

Bre*_*bad 12 configuration php-fpm pool

必须自定义新服务器的 php-fpm 池配置,我想知道是否可能/允许/建议有一个新的池文件,其名称按字母顺序排列在原始文件之后,该文件仅具有覆盖初始配置的值。

原始配置在/etc/php/7.0/fpm/pool.dnamed 中www.conf

看来,根据安装相关的页面,工程师直接修改原始值(保存初始值的副本)。例如

[www]
...
user www-data
group www-data
pm.max_children 2
Run Code Online (Sandbox Code Playgroud)

修改后给出

[www]
...
user myapp         ; was www-data
group myapp        ; was www-data
pm.max_children 8  ; was 2
Run Code Online (Sandbox Code Playgroud)

但似乎这可能是 php-fpm 下次升级后要重复的任务(而且配置在7.0路径中,这令人担忧)。

而不是修改原始文件,我想保持它不变,并添加另一个,说wwwmyapp.conf将声明相同的池,并且只有已更改的值

wwwmyapp.conf

[www]        ; same pool!
user myapp
group myapp
pm.max_children 8
Run Code Online (Sandbox Code Playgroud)

in pool.d, 文件列表

www.conf
wwwmyapp.conf
Run Code Online (Sandbox Code Playgroud)

因为在php-fpm.conf所有池 conf 文件中都加载了, 的值wwwmyapp将在www(在同一个www池中)之后读取,并且应该覆盖第一个值。

  • 它似乎在一些测试中工作并且没有报告错误,但是它会一直工作吗,并且适用于所有值?
  • 我们应该直接覆盖配置文件吗?

无法在任何文档中找到答案,即使在 php.net 上也是如此。

Bre*_*bad 15

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

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

  • php-fpm.conf首先读取主配置文件【fpm_conf_load_ini_file ()】,
  • 所有include指令都按顺序读取,由于glob ()给出了文件列表,
  • 每个文件都由相同的fpm_conf_load_ini_file ()解析,
  • 文件中的条目会覆盖任何先前设置的值,
  • 任何 newinclude都会递归调用包含处理函数,并且
  • 水珠()函数对名称,默认情况下(无GLOB_NOSORT选项)

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

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

  • 另外,由于默认池名称是“www”,因此覆盖的唯一方法是使用 pool.d 文件名,例如“wwwsomething”或以“x”、“y”或“z”开头。 (2认同)
  • 谢谢!我已将文件命名为“z-www-overrides.conf”,并且它覆盖了“[www]”池选项! (2认同)