![使用另一个文件覆盖 php-fpm 池配置值](https://linux22.com/image/690669/%E4%BD%BF%E7%94%A8%E5%8F%A6%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6%E8%A6%86%E7%9B%96%20php-fpm%20%E6%B1%A0%E9%85%8D%E7%BD%AE%E5%80%BC.png)
必须定制新服务器的 php-fpm 池配置,我想知道是否有可能/允许/推荐使用一个新的池文件,其名称按字母顺序排列在原始文件之后,该文件仅具有覆盖初始配置的值。
原始配置在/etc/php/7.0/fpm/pool.d
named中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
所有池中都加载了配置文件,因此的值将在(同一个池中)wwwmyapp
的值之后读取,并且应该覆盖第一个值。www
www
- 它似乎在一些测试中起作用并且没有报告错误,但它会一直起作用并且适用于所有值吗?
- 我们应该直接覆盖配置文件吗?
在任何文档中都找不到答案,即使在 php.net 上也是如此。
答案1
无法从其他来源找到“官方”确认,但经过一番研究后得出了一些结果:
分析源代码,php7.0-fpm
更具体地说fpm-conf.c
,似乎
php-fpm.conf
首先读取主配置文件[fpm_conf_load_ini 文件()],- 所有
include
指令按顺序读取,给出文件列表,这要归功于全局(), - 每个文件都由相同的解析fpm_conf_load_ini 文件(),
- 文件中的条目会覆盖任何先前设置的值,
- 任何新的
include
都会对包含处理函数进行递归调用,并且 - 这全局() 函数默认对名称进行排序(无
GLOB_NOSORT
选项)
因此,我们可以假设 - 至少在这个版本中,但考虑到目前的代码,这不太可能很快改变 -pool.d
按照字母顺序排列目录配置文件是安全的;任何先前记录的值都会被之后读取的同名条目覆盖。
我们有一种干净的方法来处理配置文件php-fpm
,保持分发文件不变,并添加名称按字母顺序大于打包文件名称的自定义文件,其中包含必须更改的几个选项。
答案2
如果你有像 php-overrides.ini 这样的文件,你应该将其复制到
/etc/php/7.0/fpm/conf.d/99-overrides.ini
99 前缀是由于执行顺序
答案3
通过自定义文件覆盖 [www] 池值.conf
:
这是有可能的,而且@breaking-not-so-bad解释关于如何加载配置文件的介绍很棒,我建议你先阅读它。
但绝对值得强调的是配置文件命名的重要性(因为它可能很棘手):
正如@hroj3e 解释的那样,以及@istranger 在评论中举例说明的那样多于
- 如果默认池名称是 www,则覆盖它的唯一方法是使用 pool.d 文件名(如 wwwsomething 或以 x、y 或 z 开头)-@hroj3e
- 命名文件
z-www-overrides.conf
并覆盖[www]
池选项 -@istranger
一个例子:
创建文件/etc/php/7.0/fpm/conf.d/z-www-overrides.conf
将覆盖以下设置php-fpm.conf
:
[www]
user myapp
group myapp
pm.max_children 8