对于测试用途为主的主机, 或者供应商很常需要在主机安装多个不同的 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 进去.