在 CentOS/RHEL 8 上安装多个 PHP 版本

本文将介绍如何使用 PHP-FPM 和 mod_fcgid 处理程序在单个 Apache Web 服务器上实现两个版本的 PHP。

FPM(FastCGI 进程管理器)是 PHP FastCGI 实现,具有一些添加功能(主要)对高负载站点有用。
使用此处理程序,系统将以拥有域/子域的用户身份运行 PHP 脚本。
每个 FPM 池都可以有独立的设置。

在 RHEL 8 上安装多个 PHP 版本:

我们可以从 Remi yum 存储库轻松安装不同版本的 PHP。

安装 PHP 5.6

[root@apache-01 ~]# dnf install -y php56 php56-php-fpm

安装 PHP 7.4

[root@apache-01 ~]# dnf install -y php74 php74-php-fpm

我们需要创建脚本包装器,以根据用户请求调用所需版本的 PHP。

执行以下命令来创建 PHP 脚本包装器。

[root@apache-01 ~]# cat > /var/www/cgi-bin/php56.fcgi << EOF
> #!/bin/bash
> exec /bin/php56-cgi
> EOF
[root@apache-01 ~]# cat > /var/www/cgi-bin/php74.fcgi << EOF
> #!/bin/bash
> exec /bin/php74-cgi
> EOF

添加对这些脚本文件的执行权限。

[root@apache-01 ~]# chmod 755 /var/www/cgi-bin/php*

现在添加 Apache 虚拟主机配置以在不同端口上运行。

为基于 PHP 5.6 的虚拟主机创建配置。

[root@apache-01 ~]# vi /etc/httpd/conf.d/php56.conf

在此文件中添加以下指令。

Listen 81
<VirtualHost *:81>
     ServerAdmin root@localhost.com
     ServerName 56.test
     DocumentRoot /var/www/html
     DirectoryIndex index.php index.html
<FilesMatch "\.php$">
  <If "-f %{REQUEST_FILENAME}">
      SetHandler "proxy:unix:/var/opt/remi/php56/run/php-fpm/www.sock|fcgi://localhost"
  </If>
</FilesMatch>
     ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
     AddHandler php56-fcgi .php
     Action php56-fcgi /cgi-bin/php56.fcgi
 <Directory  "/var/www/html">
    AllowOverride All
  </Directory>
</VirtualHost>

同样,为 PHP 7.4 基础虚拟主机添加配置。

[root@apache-01 ~]# vi /etc/httpd/conf.d/php74.conf

其中添加以下指令。

Listen 82
<VirtualHost *:82>
     ServerAdmin root@localhost.com
     ServerName 74.test
     DocumentRoot /var/www/html
     DirectoryIndex index.php index.html
<FilesMatch "\.php$">
  <If "-f %{REQUEST_FILENAME}">
      SetHandler "proxy:unix:/var/opt/remi/php74/run/php-fpm/www.sock|fcgi://localhost"
  </If>
</FilesMatch>
     ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
     AddHandler php74-fcgi .php
     Action php74-fcgi /cgi-bin/php74.fcgi
 <Directory  "/var/www/html">
    AllowOverride All
  </Directory>
</VirtualHost>

为网站创建默认索引。

[root@apache-01 ~]# vi /var/www/html/index.php

并在此文件中添加以下 PHP 代码。

<?php
phpinfo();
?>

将两个虚拟主机端口添加到 SELinux http_port_t 端口类型。
因此,Apache Web 服务器可以在这些端口上启动服务。

[root@apache-01 ~]# semanage port -a -t http_port_t -p tcp 81
[root@apache-01 ~]# semanage port -a -t http_port_t -p tcp 82

在 Linux 防火墙中允许这些服务端口。

[root@apache-01 ~]# firewall-cmd --permanent --add-port={81,82}/tcp
success
[root@apache-01 ~]# firewall-cmd --reload
success

启用并启动 Apache 和 PHP-FPM 服务。

[root@apache-01 ~]# systemctl enable --now httpd.service php56-php-fpm.service php74-php-fpm.service

Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service -> /usr/lib/systemd/system/httpd.service.
Created symlink /etc/systemd/system/multi-user.target.wants/php56-php-fpm.service  ->  /usr/lib/systemd/system/php56-php-fpm.service.
Created symlink /etc/systemd/system/multi-user.target.wants/php74-php-fpm.service ->  /usr/lib/systemd/system/php74-php-fpm.service.

在 Web 浏览器中分别打开:
http://apache-01.onitroad.com:81
http://apache-01.onitroad.com:82

将可以看到不同的PHP版本信息。

安装第三方 Yum 存储库:

使用以下命令安装 EPEL(Extra Packages for Enterprise Linux - 企业 Linux 的另外软件包)yum 存储库。

[root@apache-01 ~]# dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

我们需要安装 PHP 5.6 和 PHP 7.4.
这两个版本都可以在 Remi Yum 存储库中找到。
因此,使用 dnf 命令在我们的 RHEL 8 服务器上安装 Remi yum 存储库。

[root@apache-01 ~]# dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm

为新安装的 yum 存储库构建 yum 缓存。

[root@apache-01 ~]# dnf makecache
Updating Subscription Management repositories.
Extra Packages for Enterprise Linux Modular 8 - 2.2 kB/s | 9.5 kB     00:04
Extra Packages for Enterprise Linux 8 - x86_64  1.9 kB/s | 6.0 kB     00:03
Red Hat Enterprise Linux 8 for x86_64 - BaseOS  1.4 kB/s | 4.1 kB     00:02
Red Hat Enterprise Linux 8 for x86_64 - AppStre 2.1 kB/s | 4.5 kB     00:02
Remi's Modular repository for Enterprise Linux   26 kB/s | 740 kB     00:27
Safe Remi's RPM repository for Enterprise Linux 213 kB/s | 1.7 MB     00:07
Metadata cache created.
更多: zhilu jiaocheng

在 RHEL 8 上安装 Apache Web 服务器:

在基于 Red Hat 的 Linux 发行版中,Apache Web 服务器提供了 httpd 软件包。

[root@apache-01 ~]# dnf install -y httpd
日期:2020-09-17 00:12:48 来源:oir作者:oir