介紹
在Apache Web伺服器使用虛擬主機上的單個實例管理多個域。同樣,PHP-FPM使用守護進程在單個實例上管理多個 PHP 版本。您可以一起使用 Apache 和 PHP-FPM 來託管多個 PHP Web 應用程式,每個應用程式都使用不同版本的 PHP,都在同一伺服器上,並且都在同一時間。這很有用,因為不同的應用程式可能需要不同版本的 PHP,但某些伺服器堆疊,如定期配置的 LAMP 堆疊,只能管理一個。與將每個應用程式託管在自己的實例上相比,將 Apache 與 PHP-FPM 相結合也是一種更具成本效益的解決方案。
PHP-FPM也提供配置選項,stderr以及stdout日誌記錄,緊急重新開機和適應過程產卵,這是重載的網站是有用的。事實上,將 Apache 與 PHP-FPM 結合使用是託管 PHP 應用程式的最佳堆疊之一,尤其是在性能方面。
事實上,將 Apache 與 PHP-FPM 結合使用是託管 PHP 應用程式的最佳堆疊之一,尤其是在性能方面。PHP-FPM 不僅允許您同時運行多個 PHP 版本,它還提供了許多額外的功能,例如自我調整進程生成,這對於高負載網站非常有用。
在本教程中,您將在單個實例上設置兩個 PHP 網站。每個網站將使用自己的域,每個域將部署自己的 PHP 版本。第一個,site1.your_domain將部署 PHP 7.2。第二個,site2.your_domain將部署 PHP 7.3。
先決條件
• 按照 Ubuntu 20.04的初始伺服器設置(包括 sudo 非 root 用戶和防火牆)設置一台至少具有 1GB RAM 的 Ubuntu 20.04 伺服器。
• 按照如何在 Ubuntu 20.04 上安裝Apache Web 伺服器來設置和配置Apache Web 伺服器。
• 配置為指向您的 Ubuntu 20.04 伺服器的功能變數名稱。您可以按照如何從公共域註冊商指向 DigitalOcean 功能變數名稱伺服器瞭解如何將域指向 DigitalOcean Droplets 。出於本教程的目的,我們將使用兩個子域,每個子域都A在我們的 DNS 設置中指定了一條記錄:site1.your_domain和site2.your_domain.
步驟 1 — 使用 PHP-FPM 安裝 PHP 7.2 和 7.3 版
完成先決條件後,您現在將安裝 PHP 版本 7.2 和 7.3,以及 PHP-FPM 和幾個附加擴展。但要完成此操作,您首先需要將Ondrej PHP存儲庫添加到您的系統中。
執行apt-get命令安裝software-properties-common:
• sudo apt-get install software-properties-common -y
•
該software-properties-common包提供了apt-add-repository命令列實用程式,您將使用它來添加ondrej/phpPPA(個人包存檔)存儲庫。
現在將ondrej/php存儲庫添加到您的系統。該ondrej/phpPPA將有比官方Ubuntu軟體倉庫更高達最新版本的PHP,它也可以讓你安裝PHP的多個版本在同一個系統:
• sudo add-apt-repository ppa:ondrej/php
•
更新存儲庫:
• sudo apt-get update -y
•
接下來,安裝php7.2,php7.2-fpm,php7.2-mysql,libapache2-mod-php7.2,並libapache2-mod-fcgid用下麵的命令:
• sudo apt-get install php7.2 php7.2-fpm php7.2-mysql libapache2-mod-php7.2 libapache2-mod-fcgid -y
•
• php7.2 是用於運行 PHP 應用程式的元包。
• php7.2-fpm 提供作為守護進程運行並接收 Fast/CGI 請求的 Fast Process Manager 解譯器。
• php7.2-mysql 將 PHP 連接到 MySQL 資料庫。
• libapache2-mod-php7.2 為 Apache 網路服務器提供 PHP 模組。
• libapache2-mod-fcgid 包含一個 mod_fcgid,它啟動許多 CGI 程式實例來處理併發請求。
現在對 PHP 7.3 版重複此過程。安裝php7.3,php7.3-fpm,php7.3-mysql,和libapache2-mod-php7.3。
• sudo apt-get install php7.3 php7.3-fpm php7.3-mysql libapache2-mod-php7.3 -y
•
安裝兩個 PHP 版本後,啟動php7.2-fpm服務:
• sudo systemctl start php7.2-fpm
•
接下來,驗證php7.2-fpm服務的狀態:
• sudo systemctl status php7.2-fpm
•
您將看到以下輸出:
Output
• ● php7.2-fpm.service - The PHP 7.2 FastCGI Process Manager
•
• Loaded: loaded (/lib/systemd/system/php7.2-fpm.service; enabled; vendor preset: enabled)
•
• Active: active (running) since Fri 2020-06-05 11:25:07 UTC; 1min 38s ago
•
• Docs: man:php-fpm7.2(8)
•
• Main PID: 13703 (php-fpm7.2)
•
• Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
•
• Tasks: 3 (limit: 2353)
•
• Memory: 6.2M
•
• CGroup: /system.slice/php7.2-fpm.service
•
• ├─13703 php-fpm: master process (/etc/php/7.2/fpm/php-fpm.conf)
•
• ├─13719 php-fpm: pool www
•
• └─13720 php-fpm: pool www
•
•
•
• Jun 05 11:25:07 ubuntu systemd[1]: Starting The PHP 7.2 FastCGI Process Manager...
•
• Jun 05 11:25:07 ubuntu systemd[1]: Started The PHP 7.2 FastCGI Process Manager.
•
•
•
重複這個過程,現在啟動php7.3-fpm服務:
• sudo systemctl start php7.3-fpm
•
接下來,驗證php7.3-fpm服務的狀態:
• sudo systemctl status php7.3-fpm
•
您將看到以下輸出:
Output
• ● php7.3-fpm.service - The PHP 7.3 FastCGI Process Manager
•
• Loaded: loaded (/lib/systemd/system/php7.3-fpm.service; enabled; vendor preset: enabled)
•
• Active: active (running) since Fri 2020-06-05 11:26:33 UTC; 56s ago
•
• Docs: man:php-fpm7.3(8)
•
• Process: 23470 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/7.3/fpm/pool.d/www.conf 73 (code=ex>
•
• Main PID: 23452 (php-fpm7.3)
•
• Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
•
• Tasks: 3 (limit: 2353)
•
• Memory: 7.1M
•
• CGroup: /system.slice/php7.3-fpm.service
•
• ├─23452 php-fpm: master process (/etc/php/7.3/fpm/php-fpm.conf)
•
• ├─23468 php-fpm: pool www
•
• └─23469 php-fpm: pool www
•
•
•
• Jun 05 11:26:33 ubuntu systemd[1]: Starting The PHP 7.3 FastCGI Process Manager...
•
• Jun 05 11:26:33 ubuntu systemd[1]: Started The PHP 7.3 FastCGI Process Manager.
•
•
•
最後,您必須啟用多個模組,以便您的 Apache2 服務可以使用多個 PHP 版本:
• sudo a2enmod actions fcgid alias proxy_fcgi
•
• actions 用於根據媒體類型或請求方法執行 CGI 腳本。
• fcgid 是 mod_cgi 的高性能替代方案,它啟動足夠數量的 CGI 程式實例來處理併發請求。
• alias 提供文檔樹中主機檔案系統不同部分的映射,以及 URL 重定向。
• proxy_fcgi 允許 Apache 將請求轉發到 PHP-FPM。
現在重新開機 Apache 服務以應用您的更改:
• sudo systemctl restart apache2
•
此時,您已經在伺服器上安裝了兩個 PHP 版本。接下來,您將為要部署的每個網站創建一個目錄結構。
步驟 2 — 為兩個網站創建目錄結構
在本節中,您將為兩個網站中的每一個創建一個文檔根目錄和一個索引頁面。
首先,為site1.your_domain和創建文檔根目錄site2.your_domain:
• sudo mkdir /var/www/site1.your_domain
•
• sudo mkdir /var/www/site2.your_domain
•
預設情況下,Apache 網路服務器作為www-data使用者和www-data組運行。為確保您擁有網站根目錄的正確所有權和許可權,請執行以下命令:
• sudo chown -R www-data:www-data /var/www/site1.your_domain
•
• sudo chown -R www-data:www-data /var/www/site2.your_domain
•
• sudo chmod -R 755 /var/www/site1.your_domain
•
• sudo chmod -R 755 /var/www/site2.your_domain
•
接下來,您將info.php在每個網站根目錄中創建一個檔。這將顯示每個網站的 PHP 版本資訊。從site1開始:
• sudo nano /var/www/site1.your_domain/info.php
•
添加以下行:
/var/www/site1.your_domain/info.php
保存並關閉文件。現在將您創建的 info.php 檔複製到site2:
• sudo cp /var/www/site1.your_domain/info.php /var/www/site2.your_domain/info.php
•
您的 Web 伺服器現在應該具有每個網站向訪問者提供資料所需的文檔根目錄。接下來,您將配置 Apache Web 伺服器以使用兩個不同的 PHP 版本。
第 3 步 – 為兩個網站配置 Apache
在本節中,您將創建兩個虛擬主機設定檔。這將使您的兩個網站能夠同時使用兩個不同的 PHP 版本。
為了讓 Apache 提供這些內容,有必要使用正確的指令創建一個虛擬主機檔。您無需修改位於 的默認設定檔/etc/apache2/sites-available/000-default.conf,而是在 目錄中創建兩個新設定檔/etc/apache2/sites-available/。
首先為網站site1.your_domain創建一個新的虛擬主機設定檔。在這裡,您將使用以下命令指示 Apache 呈現內容php7.2:
• sudo nano /etc/apache2/sites-available/site1.your_domain.conf
•
添加以下內容。確保網站目錄路徑、伺服器名稱和 PHP 版本與您的設置匹配:
/etc/apache2/sites-available/site1.your_domain.conf
ServerAdmin admin@site1.your_domain
ServerName site1.your_domain
DocumentRoot /var/www/site1.your_domain
DirectoryIndex info.php
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
# From the Apache version 2.4.10 and above, use the SetHandler to run PHP as a fastCGI process server
SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost"
ErrorLog ${APACHE_LOG_DIR}/site1.your_domain_error.log
CustomLog ${APACHE_LOG_DIR}/site1.your_domain_access.log combined
在此檔中,您將DocumentRoot更新為新目錄,將ServerAdmin更新為your_domain網站管理員可以訪問的電子郵件。您還更新了ServerName,它為這個虛擬主機配置建立了基本域,並且您已經添加了一個SetHandler指令來將 PHP 作為 fastCGI 進程伺服器運行。
保存並關閉文件。
接下來,為網站site2.your_domain創建一個新的虛擬主機設定檔。您將指定此子域進行部署php7.3:
• sudo nano /etc/apache2/sites-available/site2.your_domain.conf
•
添加以下內容。再次確保網站目錄路徑、伺服器名稱和 PHP 版本與您的唯一資訊匹配:
/etc/apache2/sites-available/site2.your_domain.conf
ServerAdmin admin@site2.your_domain
ServerName site2.your_domain
DocumentRoot /var/www/site2.your_domain
DirectoryIndex info.php
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
# 2.4.10+ can proxy to unix socket
SetHandler "proxy:unix:/run/php/php7.3-fpm.sock|fcgi://localhost"
ErrorLog ${APACHE_LOG_DIR}/site2.your_domain_error.log
CustomLog ${APACHE_LOG_DIR}/site2.your_domain_access.log combined
完成後保存並關閉檔。然後,檢查 Apache 設定檔是否有任何語法錯誤:
• sudo apachectl configtest
•
您將看到以下輸出:
Output
• Syntax OK
•
接下來,使用以下命令啟用兩個虛擬主機設定檔:
• sudo a2ensite site1.your_domain
•
• sudo a2ensite site2.your_domain
•
現在禁用預設網站,因為您不需要它。:
• sudo a2dissite 000-default.conf
•
最後,重新開機 Apache 服務以實現您的更改:
• sudo systemctl restart apache2
•
現在您已經配置了 Apache 來為每個網站提供服務,您將測試它們以確保正確的 PHP 版本正在運行。