提升網站性能:如何在 Ubuntu 22.04 LTS 上配置 PHP-FPM

在本教程中,我們將向您展示如何在 Ubuntu 22.04 LTS 上配置 PHP-FPM。 對於那些不知道的人,在 Web 開發領域,PHP 是一種流行的服務器端腳本語言,用於創建動態網站和 Web 應用程序。 PHP-FPM(FastCGI 進程管理器) 是一個 PHP FastCGI 實現,允許像 Nginx 這樣的 Web 服務器有效地處理 PHP 請求。 在這篇博文中,我們將探索如何在 Ubuntu 22.04 LTS 上配置 PHP-FPM 並充分利用這個強大的工具。

我們將涵蓋一系列主題,包括配置 Nginx 以使用 PHP-FPM、自定義 PHP-FPM 池以獲得最佳性能、微調 PHP-FPM 設置以滿足您的特定需求、使用 PM2 等工具監控 PHP-FPM 性能,以及保護 PHP-FPM 和 Nginx 以保護您的服務器免受潛在的安全威脅。

如果您是 PHP-FPM 的新手或想了解更多有關其功能的信息,這篇博文將提供在 Ubuntu 22.04 LTS 上開始使用 PHP-FPM 的綜合指南。 到本文結束時,您將深入了解如何為您的 Web 應用程序配置和優化 PHP-FPM,確保它們平穩高效地運行。 那麼,讓我們開始吧!

目錄

在 Ubuntu 22.04 上配置 PHP-FPM

在 Ubuntu 22.04 上安裝 Nginx 和 PHP-FPM

首先,讓我們從在 Ubuntu 22.04 上安裝 Nginx 和 PHP-FPM 開始。 您可以通過在終端中運行以下命令來安裝這兩個包:

sudo apt install nginx php-fpm

安裝後,您可以通過運行以下命令來驗證 PHP-FPM 服務是否正在運行:

systemctl status php-fpm

如果 PHP-FPM 正在運行,您應該會看到指示該服務處於活動狀態的狀態消息。

有關安裝 Nginx 的其他資源,請閱讀以下帖子:

  • 如何在 Ubuntu Linux 上安裝 Nginx √

在 Ubuntu 上配置 PHP-FPM 和 Nginx

安裝 Nginx 和 PHP-FPM 後,您需要配置 Nginx 以使用 PHP-FPM。 為此,您需要編輯 Nginx 配置文件。

Nginx 配置文件位於 /etc/nginx/sites-available/default. 使用您喜歡的文本編輯器打開此文件:

nano /etc/nginx/sites-available/default

在此文件中,找到以下行:

index index.html index.htm;

添加 index.php 到索引文件列表:

index index.html index.htm index.php;

接下來,找到以下幾行:

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ .php$ {
#       include snippets/fastcgi-php.conf;
#
#       # With php-fpm (or other unix sockets):
#       fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
#       # With php-cgi (or other tcp sockets):
#       # fastcgi_pass 127.0.0.1:9000;
#}

取消註釋這些行並修改 fastcgi_pass 行以指向 PHP-FPM 套接字文件:

location ~ .php$ {
       include snippets/fastcgi-php.conf;

       # With php-fpm (or other unix sockets):
       fastcgi_pass unix:/var/run/php/php-fpm.sock;
       # With php-cgi (or other tcp sockets):
       # fastcgi_pass 127.0.0.1:9000;
}

Save 和 close 該文件,然後重新啟動 Nginx 以應用更改:

sudo systemctl restart nginx

自定義 PHP-FPM 池

默認情況下,PHP-FPM 創建一個進程池來處理所有 PHP 請求。 但是,您可以為不同的 PHP 應用程序或虛擬主機創建額外的池。

要創建一個新的 PHP-FPM 池,您需要在 /etc/php/7.4/fpm/pool.d/ 目錄。 您可以創建默認池配置文件的副本並修改它以滿足您的需要:

cp /etc/php/7.4/fpm/pool.d/www.conf /etc/php/7.4/fpm/pool.d/idroot.conf

打開新文件進行編輯:

nano /etc/php/7.4/fpm/pool.d/idroot.conf

根據需要更改池名稱、偵聽地址和端口、用戶和組以及其他設置:

[idroot]

user = nginx
group = nginx

listen = 127.0.0.1:9000

listen.owner = www-data
listen.group = www-data
listen.mode = 0660

pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 5

php_admin_value[upload_max_filesize] = 10M
php_admin_value[post_max_size] = 10M

在這個 example,我們創建了一個新的 PHP-FPM 池,名為“idroot” 在端口 9000 上偵聽並作為“nginx“用戶和”nginx“ 團體。 我們還設置了一些自定義的 PHP 配置值,使用 php_admin_value directive.

Save 和 close 該文件,然後重新啟動 PHP-FPM 服務以應用更改:

sudo systemctl restart php7.4-fpm

微調 PHP-FPM 設置

除了配置 PHP-FPM 池之外,還可以微調各種 PHP-FPM 設置以優化其性能。 以下是您可以調整的一些關鍵設置:

  • pm.max_children:此設置定義每個池可以生成的最大子進程數。 您應該根據服務器的可用資源和站點接收的流量來設置此值。
  • pm.start_servers:此設置定義了 PHP-FPM 服務啟動時應啟動的子進程數。 您應該根據站點上的預期流量負載設置此值。
  • pm.min_spare_serverspm.max_spare_servers:這些設置定義了應保持運行以處理傳入請求的空閒子進程的最小和最大數量。 您應該根據站點上的預期流量負載設置這些值。
  • pm.max_requests:此設置定義子進程在終止並被新進程替換之前應處理的請求數。 這有助於防止內存洩漏和其他可能由長時間運行的進程引起的問題。
  • request_terminate_timeout:此設置定義請求在終止之前可以花費的最長時間。 這有助於防止長時間運行或停滯的請求佔用資源並影響 PHP-FPM 服務的整體性能。

要調整這些設置,您需要編輯 www.conf 為您創建的每個 PHP-FPM 池創建文件。 該文件通常位於 /etc/php/7.4/fpm/pool.d/ 目錄。

為了 example調整 pm.max_children 設置為 example.com 池,您可以將以下行添加到 www.conf 文件:

pm.max_children = 50

同樣,調整 pm.start_servers, pm.min_spare_servers, 和 pm.max_spare_servers 設置,您將添加以下行:

pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20

調整 pm.max_requestsrequest_terminate_timeout 設置,您將添加以下行:

在對 PHP-FPM 設置進行任何更改後,您應該重新啟動 PHP-FPM 服務以確保更改生效:

sudo systemctl restart php7.4-fpm

通過微調這些設置,您可以優化 PHP-FPM 服務的性能並確保它能夠處理您網站上的預期流量負載。

監控 PHP-FPM 性能

一旦 PHP-FPM 啟動並運行,您應該定期監控其性能以確保其平穩高效地運行。 可用於監控 PHP-FPM 性能的一些工具和技術包括:

  • PHP-FPM 狀態頁面:

PHP-FPM 有一個內置的狀態頁面,提供有關池、進程和性能指標狀態的實時信息。 要訪問狀態頁面,請將以下行添加到 PHP-FPM 池配置文件中:

pm.status_path = /status
ping.path = /ping

添加後,您可以通過訪問 URL 訪問狀態頁面 https://<your-IP-address>:<port>/status. 該頁面將顯示有關 PHP-FPM 池的大量信息,包括活動進程數和空閒進程數、已處理的請求數、平均請求時間等等。

  • 系統監控工具:top、htop 和 ps 等系統監控工具可用於監控 PHP-FPM 進程和系統資源。 這些工具提供有關 PHP-FPM 進程以及整個系統的 CPU、內存和 I/O 使用情況的實時信息。
  • 日誌文件:PHP-FPM 還會生成日誌文件,其中包含有關錯誤、警告和其他事件的信息。 通過分析這些日誌文件,您可以識別和解決 PHP-FPM 性能問題。
  • 性能測試:您還可以使用性能測試工具,例如 Apache Bench 或 Siege 來測試 PHP-FPM 在不同負載和場景下的性能。 這些工具可以幫助您識別瓶頸並優化您的 PHP-FPM 配置以獲得更好的性能。

通過定期監控 PHP-FPM 的性能,您可以確保您的 Web 應用程序平穩高效地運行,並在出現的任何問題影響您的用戶之前對其進行故障排除。

保護 PHP-FPM 和 Nginx

雖然 PHP-FPM 和 Nginx 默認情況下都是安全的,但您可以採取一些額外的步驟來進一步保護您的 Web 服務器並保護它免受攻擊。 保護 PHP-FPM 和 Nginx 的一些最佳實踐是:

  1. 使用 HTTPS:始終使用 HTTPS 來加密客戶端和服務器之間的流量。 HTTPS確保數據安全傳輸,不被第三方攔截。 要啟用 HTTPS,您需要在 Web 服務器上安裝 SSL/TLS 證書並配置 Nginx 以使用它。
  2. 啟用防火牆:配置防火牆以限制對您的 Web 服務器的訪問,並且只允許來自受信任來源的流量。 您可以使用 Ubuntu 22.04 中包含的 UFW 防火牆為您的 Web 服務器配置防火牆規則。
  3. 禁用未使用的服務:禁用 Web 應用程序不需要的任何不必要的服務和模塊。 這減少了服務器的攻擊面,使攻擊者更難找到漏洞。
  4. 使用強密碼:始終為您的 Web 應用程序、PHP-FPM 和 Nginx 使用強密碼。
  5. 保持軟件最新:定期更新 PHP-FPM、Nginx 和其他軟件組件,以確保您的 Web 服務器免受已知漏洞和攻擊。 使用像 apt 或 yum 這樣的包管理器來安裝更新和安全補丁。

結論

總之,PHP-FPM 是一種在 Web 服務器上運行 PHP 應用程序的強大而靈活的方式。 通過配置和微調您的 PHP-FPM 池和設置,您可以優化服務器的性能並確保您的 PHP 應用程序平穩運行。

我們已經介紹了在 Ubuntu 上配置 PHP-FPM 的基本步驟,包括安裝、配置 Nginx、自定義 PHP-FPM 池、微調 PHP-FPM 設置、監控 PHP-FPM 性能以及保護 PHP-FPM 和 Nginx。 我們希望本指南對您有所幫助,並且您對在 Ubuntu 服務器上配置和管理 PHP-FPM 的能力充滿信心。

在生產環境中實施配置之前,請記住始終徹底測試您的配置。 此外,及時了解最新的安全建議和最佳實踐,以確保您的服務器和應用程序安全。