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

时间:2018-04-24 14:37:59

标签: php apache centos centos7

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

6 个答案:

答案 0 :(得分:14)

安装所有必要的回购和包

非常感谢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

停止两个fpm服务器

systemctl stop php56-php-fpm
systemctl stop php72-php-fpm

默认情况下,它侦听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

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

systemctl start php72-php-fpm
systemctl start php56-php-fpm
使脚本包装器调用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

通过apache使其可执行

sudo chmod 755 /var/www/cgi-bin/php56.fcgi
sudo chmod 755 /var/www/cgi-bin/php72.fcgi

为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

制作测试页面,创建.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

现在你应该能够测试它了

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

答案 1 :(得分:6)

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

但是使用SetHandler进行fastcgi代理看起来更好,更现代,这要归功于httpd 2.4:

SetHandler "proxy:fcgi://127.0.0.1:9000"

在一些博文中解释了这一点:

答案 2 :(得分:0)

看起来你要做的就是这样:

running-two-php-versions-on-the-same-server

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

答案 3 :(得分:0)

我必须将以下内容添加到我的php.conf目录语句内使Apache服务器API变化FPM / FastCGI的,而不是CGI / FastCGI的 - 你的解决方案是近乎完美的,但!现在,如果我能弄清楚如何使用套接字而不是TCP来实现它,那我将是一个快乐的程序员。

# mod_proxy_fcgi options
<IfModule mod_proxy_fcgi.c>
    <FilesMatch \.php$>
       SetHandler "proxy:fcgi://127.0.0.1:9072"
    </FilesMatch>
</IfModule>

答案 4 :(得分:0)

回复runwuf

你好, 关于SELinux的方法存在一个问题

要么禁用SELinux(如果不关心安全性),要么管理SELinux端口策略

如果您不处理SELinux,如果将SELinux设置为“强制”模式,则php56-php-fpm不会启动

运行以下命令以使SELinux允许端口

  semanage port -a -t http_port_t -p tcp 9072
  semanage port -a -t http_port_t -p tcp 9056

然后最后尝试启动fpm模块

答案 5 :(得分:0)

我在这里徘徊,寻找解决方案。 CentOS现在有一个PHP Select,可让您在服务器上运行不同版本的PHP。

更多信息可以在这里找到:http://forum.centos-webpanel.com/php/php-selector/