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

CentOS 7上使用Apache的多个PHP版本,php,apache,centos,centos7,Php,Apache,Centos,Centos7,这里有人能告诉我在CentOS 7上用一个apache实例安装和配置多PhP的方法,以及测试它的正确方法吗 看起来您要做的事情与此类似: 我个人不想在同一个apache实例上尝试两个php版本。。。我将通过tarball安装不同版本的php,并在同样由tarball安装的apache的单独实例上运行它们,并将每个httpd.conf指向不同版本的php。安装所有必要的repo和包 非常感谢 以下命令假定您已经sudo su-,或者必须将sudo添加到每个命令中: yum install htt

这里有人能告诉我在CentOS 7上用一个apache实例安装和配置多PhP的方法,以及测试它的正确方法吗

看起来您要做的事情与此类似:

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

安装所有必要的repo和包 非常感谢 以下命令假定您已经
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服务器 默认情况下,它侦听127.0.0.1端口9000,使它们侦听不同的端口 现在,可以在不同的端口上启动两个不同版本的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创建php配置。默认情况下,它运行php56 fcgi处理程序
正如@runwuf所解释的,这可以使用存储库或存储库中可用的软件集合来实现

但得益于httpd 2.4,将SetHandler用于fastcgi代理似乎是一种更好、更现代的方式:

SetHandler "proxy:fcgi://127.0.0.1:9000"
一些博客文章对此进行了解释:

  • 在雷米的博客上
  • 关于RH开发者的博客

我必须在directory语句中的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>
#mod_proxy_fcgi选项
SetHandler“代理:fcgi://127.0.0.1:9072"
回复runwuf

你好,, 关于SELinux,您的方法有一个问题

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

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

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

semanage port-a-t http\u port\u t-p tcp 9072
semanage端口-a-t http_端口\u t-p tcp 9056

然后最后尝试启动fpm模块

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


更多信息可在此处找到:

多个PHP实例或一个PHP实例中的多个PHP项目?@nerdlyist apache上的多个PHP实例。我发现方法是通过CGI。。。但我仍在寻找正确的答案。我能问一下原因吗?我可以说,在一台主机上实现这一点并不简单。我通常的策略是使用VirtualBox在主机上运行虚拟机(VM)。或者在一个实例中设置多个项目(非常简单并且有很好的文档记录)是的,您共享的url就是我想要的。。但没有显示完整的程序。。我想它是为ubuntu设计的。。我是个新手。。如果没有帮助,就无法运行。是否有任何理由需要在同一个apache中运行两个版本的php?在两个不同的apache但在同一台机器上运行它们难道不可行吗?我认为在大多数用例中,这非常接近您的需要,并且是一个更容易、更安全的解决方案,可以长期管理。实际上,这是我的老师交给我的任务。。我非常想做这件事。。我不能袖手旁观。。请让我知道,如果你找到一个解决方案的cgi模块。。!!我花了一点时间来尝试这一点,并让它在centos7上工作,请参阅下面我的新答案,希望它能有所帮助!cgi wrapper(IMHO)是一个不推荐使用的wau,最好使用SetHandler到代理的方式,将添加另一个答案。在Centos 6.9和apache 2.2中为我工作(进行了许多更改)。向上投票:)呃-不要将其与其他回购协议(例如WebStatic^^^)-禁用其他回购协议后,其工作顺利,非常感谢!谢谢你,雷米,好消息!那么,用
SetHandler
重写我提出的解决方案会是这样的吗<代码>SetHandler“代理:fcgi://127.0.0.1:9056“SetHandler”代理:fcgi://127.0.0.1:9072“@remicolet在一个有几十个站点使用.htaccess的服务器上,是否应该禁用mod_php?需要做的是简单地将所有“.htaccess”重命名为“.user.ini”?不,.user.ini在我的托管公司没有相同的语法(不需要php_标志指令),有一台机器有CentOS和PHP5.6,这很好,然后PHP7出现了,我需要在PHP5和PHP7上运行一些VHOST,所以他们设置了PHP7 vHost中的“SetHandler”,但现在我从应用程序发送的X-FRAME-OPTION标头没有通过处理程序发送到浏览器,有什么建议吗?您尝试过这个吗?SetHandler代理:fcgi://127.0.0.1:9056“SetHandler”代理:fcgi://127.0.0.1:9072“@runwuf-是的,我就是这么做的,但是它使用TCP连接而不是套接字。。。如果我能使用插座,那就更好了,不幸的是,我从来没有想出正确的方法。。。
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
sudo chmod 755 /var/www/cgi-bin/php56.fcgi
sudo chmod 755 /var/www/cgi-bin/php72.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
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
sudo systemctl enable httpd
sudo systemctl enable php56-php-fpm
sudo systemctl enable php72-php-fpm
SetHandler "proxy:fcgi://127.0.0.1:9000"
# mod_proxy_fcgi options
<IfModule mod_proxy_fcgi.c>
    <FilesMatch \.php$>
       SetHandler "proxy:fcgi://127.0.0.1:9072"
    </FilesMatch>
</IfModule>