對於測試用途為主的主機, 或者供應商很常需要在主機安裝多個不同的 PHP 版本, 該不同的 PHP 版本可以同時執行。
用 PHP-FPM 執行的 PHP 環境有很多優點, 除了可以安裝多個 PHP-FPM 外, 也可以對不同的 domain/subdomain 設定不同的 PHP-FPM pool, 給予不同的設定或權限。
以下文章會在 Rocky Linux 上安裝不同的 PHP 版本, 並配置到 Apache 伺服器執行.
第一步先安裝 EPEL Repo, 如果已經安裝則可以忽略:
- # yum install epel-release
安裝 PHP 會透過 Remi Yum Repo 完成, 以下例子是安裝 PHP 5.6 及 PHP7.4, 執行以下指令安裝 Remi Repo:
-
# dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm
# dnf makecache
安裝 Apache Server:
- # dnf install -y httpd
現在開始安裝 PHP, 由於只是示範, 所以不會安裝額外的 PHP 套件, 只作基本安裝, 可以按需要安裝不同 PHP 套件, 先安裝 PHP 5.6:
- # dnf install -y php56 php56-php-fpm
安裝 PHP 7.4:
- # dnf install -y php74 php74-php-fpm
安裝好 PHP 5.6 及 PHP 7.4 後, 啟動 PHP-FPM 及設定開機自動執行:
-
# systemctl start php56-php-fpm && systemctl start php74-php-fpm
# systemctl enable php56-php-fpm && systemctl enable php74-php-fpm
設定不同域名執行不同 PHP 版本, 例如以 site1.mydomain.com 為例, 建立檔案 /etc/httpd/conf.d/site1.mydomain.com.conf
以下是檔案內容, 實際情況要按執行環境修改, 以下是執行 PHP 5.6 的 domain:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<virtualhost *:80=""> ServerName site1.mydomain.com DocumentRoot /var/www/site1.mydomain.com <directory var="" www="" site1.mydomain.com=""> Options -Indexes +FollowSymLinks +MultiViews AllowOverride All Require all granted </directory> <filesmatch \.php$=""> SetHandler "proxy:unix:/var/run/php/php5.6-fpm.sock|fcgi://localhost" </filesmatch> </virtualhost> |
現在建立另一個網站, 名為 site2.mydomain.com 為例, 建立檔案 /etc/httpd/conf.d/site2.mydomain.com.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<virtualhost *:80=""> ServerName site2.mydomain.com DocumentRoot /var/www/site2.mydomain.com <directory var="" www="" site1.mydomain.com=""> Options -Indexes +FollowSymLinks +MultiViews AllowOverride All Require all granted </directory> <filesmatch \.php$=""> SetHandler "proxy:unix:/var/run/php/php7.4-fpm.sock|fcgi://localhost" </filesmatch> </virtualhost> |
建立以上檔案後可以啟動 Apache 及設定開機自動執行:
-
# systemctl start httpd
# systemctl enable httpd
現在網站 site1.mydomain.com 會使用 PHP 5.6, 而 site2.mydomain.com 會使用 PHP 7.4.
如果想切換更加方便, 可以在 /home/httpd/conf/ 目錄下建立 2 個檔案, 分別是 PHP 5.6 及 PHP 7.4, 將上面 <filesmatch \.php$=””> …… </filesmatch>的內容複製, 要使用那個版本就 include 進去.