Miklix

如何在 NGINX 中設定單獨的 PHP-FPM 池

已發佈: 2025年2月15日 上午11:53:15 [UTC]
最後更新: 2026年1月12日 上午8:30:10 [UTC]

在本文中,我將介紹執行多個 PHP-FPM 池並透過 FastCGI 將 NGINX 連接到它們所需的設定步驟,從而實現虛擬主機之間的進程分離和隔離。


該頁面是由英語機器翻譯而來的,以便盡可能多的人可以訪問。不幸的是,機器翻譯還不是一項完善的技術,因此可能會出現錯誤。如果您願意,可以在這裡查看原始英文版本:

How to Set Up Separate PHP-FPM Pools in NGINX

本文資訊是基於運行在 Ubuntu Server 14.04 x64 上的 NGINX 1.4.6 和 PHP-FPM 5.5.9。對於其他版本,其有效性可能存在差異。 (更新:經確認,在 Ubuntu Server 24.04、PHP-FPM 8.3 和 NGINX 1.24.0 上,本文所有步驟仍然有效。)

與將所有進程運行在同一個進程池中相比,設定多個 PHP-FPM 子進程池有許多優點。安全性、隔離性和資源管理是其中幾個主要優勢。

無論你的動機是什麼,這篇文章都會對你有幫助 :-)

第一部分 – 設定新的 PHP-FPM 池

首先,你要找到 PHP-FPM 儲存連接池配置的目錄。在 Ubuntu 14.04 上,預設情況下是 /etc/php5/fpm/pool.d。該目錄下可能已經存在一個名為 www.conf 的文件,其中包含預設連接池的配置。如果你之前沒有查看過該文件,建議你仔細閱讀並根據你的伺服器配置進行調整,因為預設設定是針對性能較低的伺服器的。但現在,只需複製一份即可,這樣我們就不用從頭開始了。

sudo cp www.conf mypool.conf

當然,你可以把「mypool」替換成你想給泳池的任何名字。

現在用 nano 或其他你喜歡的文字編輯器開啟新文件,並根據你的需求進行調整。你可能需要調整子進程數,以及進程池運行的使用者和使用者群組,但有兩個設定你必須更改:進程池的名稱和它監聽的套接字,否則它會與現有進程池衝突,導致程式停止運行。

連接池的名稱位於檔案頂部附近,用方括號括起來。預設值為 [www]。您可以根據需要更改它;我建議使用與設定檔相同的名稱,因此在本範例中,請將其變更為 [mypool]。如果您不更改它,PHP-FPM 似乎只會加載第一個具有該名稱的配置文件,這很可能會導致問題。

接下來,您需要變更正在監聽的套接字或位址,這由 listen 指令定義。預設情況下,PHP-FPM 使用 Unix 套接字,因此您的 listen 指令可能如下所示:

listen = /var/run/php5-fpm.sock

您可以將其更改為任何有效的名稱,但我建議您使用與設定檔名稱類似的名稱,例如您可以將其設定為:

listen = /var/run/php5-fpm-mypool.sock

好的,儲存檔案並退出文字編輯器。

第二部分 – 更新 NGINX 虛擬主機配置

現在,你需要打開 NGINX 虛擬主機文件,其中包含你想要更改為新池的 FastCGI 配置——或者更確切地說,連接到新的套接字。

在 Ubuntu 14.04 中,這些配置預設儲存在 /etc/nginx/sites-available 目錄下,但也可以定義在其他位置。您可能最清楚您的虛擬主機配置在哪裡 ;-)

用你喜歡的文字編輯器開啟相關的設定文件,找到定義 PHP-FPM 套接字的 fastcgi_pass 指令(必須位於 location 上下文中)。你需要修改這個值,使其與你在第一步中建立的新 PHP-FPM 連線池配置相符。繼續我們的範例,你需要將其修改為:

fastcgi_pass unix:/var/run/php5-fpm-mypool.sock;

然後儲存並關閉該文件。你現在就快完成了。

第三部分 – 重啟 PHP-FPM 和 NGINX

若要套用您所做的設定更改,請重新啟動 PHP-FPM 和 NGINX。雖然重新加載可能就足夠了,但我發現這並不總是有效,具體取決於您更改了哪些設定。就我而言,我希望舊的 PHP-FPM 子進程立即終止,因此需要重新啟動 PHP-FPM,但對於 NGINX 來說,重新載入可能就足夠了。您可以自己嘗試。

sudo service php5-fpm restart
sudo service nginx restart

好了,大功告成。如果一切操作正確,您修改的虛擬主機現在應該正在使用新的 PHP-FPM 進程池,並且不會與其他虛擬主機共用子進程。

分享至 Bluesky在 Facebook 分享在 LinkedIn 分享在 Tumblr 上分享分享至 X在 LinkedIn 分享固定在 Pinterest 上

Mikkel Christensen

關於作者

Mikkel Christensen
麥可 是 miklix.com 的創建者和所有者。他有超過 20 年的專業電腦程式設計師/軟體開發人員經驗,目前全職受僱於一家歐洲大型 IT 公司。不寫部落格時,他會將業餘時間花在各種各樣的興趣、愛好和活動上,這在一定程度上反映在本網站所涵蓋的主題的多樣性上。