Configuration
用另一個文件覆蓋 php-fpm 池配置值
必須自定義新伺服器的 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
in
pool.d
, 文件列表www.conf wwwmyapp.conf
因為在
php-fpm.conf
所有池配置文件中都載入了,所以值wwwmyapp
將在www
(在同一個www
池中)之後讀取,並且應該覆蓋第一個值。
- 它似乎在一些測試中有效並且沒有報告錯誤,但它會一直有效,並且適用於所有值嗎?
- 我們應該直接覆蓋配置文件嗎?
即使在 php.net 上,也無法在任何文件中找到答案。
無法從其他來源找到“官方”確認,但經過一些研究,這裡有一些結果:
分析
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
,保持分發文件不變,並添加名稱按字母順序大於打封包件的自定義文件,其中包含必須更改的少數選項。