在CentOS 7上使用Apache的多个PHP版本

Tab*_*ish 7 php apache centos centos7

任何人都可以在这里指导我在CentOS 7上安装和配置一个apache实例的Multi PhP,以及测试它的正确方法.

run*_*wuf 20

安装所有必要的回购和包

非常感谢https://rpms.remirepo.net/wizard/

以下命令假定您已经sudo su -或者您必须为每个命令添加sudo:

yum install httpd -y
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum install yum-utils -y
yum install php56 -y
yum install php72 -y
yum install php56-php-fpm -y
yum install php72-php-fpm -y
Run Code Online (Sandbox Code Playgroud)

停止两个fpm服务器

systemctl stop php56-php-fpm
systemctl stop php72-php-fpm
Run Code Online (Sandbox Code Playgroud)

默认情况下,它侦听127.0.0.1端口9000,让它们在不同的端口上侦听

sed -i 's/:9000/:9056/' /etc/opt/remi/php56/php-fpm.d/www.conf
sed -i 's/:9000/:9072/' /etc/opt/remi/php72/php-fpm.d/www.conf
Run Code Online (Sandbox Code Playgroud)

现在可以在不同的端口上启动两个不同版本的fpm

systemctl start php72-php-fpm
systemctl start php56-php-fpm
Run Code Online (Sandbox Code Playgroud) 使脚本包装器调用php56-cgi和php72-cgi
cat > /var/www/cgi-bin/php56.fcgi << EOF
#!/bin/bash
exec /bin/php56-cgi
EOF

cat > /var/www/cgi-bin/php72.fcgi << EOF
#!/bin/bash
exec /bin/php72-cgi
EOF
Run Code Online (Sandbox Code Playgroud)

使它们可以被apache执行

sudo chmod 755 /var/www/cgi-bin/php56.fcgi
sudo chmod 755 /var/www/cgi-bin/php72.fcgi
Run Code Online (Sandbox Code Playgroud)

为apache创建php配置.默认情况下它运行php56-fcgi处理程序

cat > /etc/httpd/conf.d/php.conf << EOF
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
AddHandler php56-fcgi .php
Action php56-fcgi /cgi-bin/php56.fcgi
Action php72-fcgi /cgi-bin/php72.fcgi

<Directory /var/www/html/php56>
    DirectoryIndex index.php
    AllowOverride all
    Require all granted
</Directory>
<Directory /var/www/html/php72>
    DirectoryIndex index.php
    AllowOverride all
    Require all granted
</Directory>
EOF
Run Code Online (Sandbox Code Playgroud)

制作测试页面,创建.htaccess使用php72-fcgi

mkdir -p /var/www/html/php56
mkdir -p /var/www/html/php72
echo "<?php phpinfo(); ?>" > /var/www/html/php56/index.php
echo "<?php phpinfo(); ?>" > /var/www/html/php72/index.php
echo "AddHandler php72-fcgi .php" > /var/www/html/php72/.htaccess
Run Code Online (Sandbox Code Playgroud)

现在你应该能够测试它了

(http://127.0.0.1/php56)
(http://127.0.0.1/php72)

如果要在服务器重新启动后自动启动这些实例

sudo systemctl enable httpd
sudo systemctl enable php56-php-fpm
sudo systemctl enable php72-php-fpm
Run Code Online (Sandbox Code Playgroud)


Rem*_*let 9

正如@runwuf所解释的那样,可以使用centos-scl存储库或remi存储库中提供的软件集合.

但是由于httpd 2.4,使用SetHandler来快速代理似乎是一种更好,更现代的方式:

SetHandler "proxy:fcgi://127.0.0.1:9000"
Run Code Online (Sandbox Code Playgroud)

一些博客文章解释了这一点:


run*_*wuf 0

看起来您正在尝试做的事情与此类似:

在同一服务器上运行两个 php 版本

我个人不想在同一个 apache 实例上尝试两个 php 版本...我会通过 tarball 安装不同版本的 php 并在也通过 tarball 安装的单独的 apache 实例上运行它们,并将每个 httpd.conf 指向不同的php 的版本。