Configuration

用另一個文件覆蓋 php-fpm 池配置值

  • October 8, 2021

必須自定義新伺服器的 php-fpm 池配置,我想知道是否有可能/允許/建議有一個新的池文件,其名稱按字母順序排列在原始文件之後,該文件僅具有覆蓋初始配置的值。

原始配置在/etc/php/7.0/fpm/pool.dnamed中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,保持分發文件不變,並添加名稱按字母順序大於打封包件的自定義文件,其中包含必須更改的少數選項。

引用自:https://serverfault.com/questions/805647