【问题标题】:Multiple PHP version with Apache on CentOS 7在 CentOS 7 上使用 Apache 的多个 PHP 版本
【发布时间】:2018-10-04 21:01:18
【问题描述】:

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

【问题讨论】:

  • 多个 PHP 实例或一个 php 实例中的多个 php 项目?
  • @nerdlyist Apache 上的多 php 实例。我发现方法是通过 CGI 的某个地方......但我仍在寻找正确的答案。
  • 我能问一下为什么吗?我可以说在一台主机上做这件事并不简单。我通常的策略是使用 VirtualBox 在主机上运行虚拟机 (VM)。或者在一个实例中设置多个项目(非常简单且有据可查)

标签: php apache centos centos7


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    回复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 模块

    【讨论】:

      【解决方案3】:

      我必须将以下内容添加到目录语句中的 php.conf 中,以使 Apache Server 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>
      

      【讨论】:

      • 你试过了吗? SetHandler "proxy:fcgi://127.0.0.1:9056" SetHandler "proxy:fcgi://127.0. 0.1:9072" 目录>
      • @runwuf - 是的,这就是我所做的,但是它使用 TCP 连接而不是套接字......如果我可以使用套接字,那将是可取的,不幸的是我从来没有想出这样做的正确方法...
      【解决方案4】:

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

      但是使用 SetHandler 来进行 fastcgi 代理似乎是一种更好、更现代的方式,这要归功于 httpd 2.4:

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

      这在一些博文中有解释:

      【讨论】:

      • 谢谢雷米,很棒的信息!所以用SetHandler重写我提出的解决方案会是这样的吗? &lt;Directory /var/www/html/php56&gt; SetHandler "proxy:fcgi://127.0.0.1:9056" &lt;/Directory&gt; &lt;Directory /var/www/html/php72&gt; SetHandler "proxy:fcgi://127.0.0.1:9072" &lt;/Directory&gt;
      • @RemiCollet 在有几十个使用 .htaccess 的站点的服务器中,是否应该禁用 mod_php?要做的就是将所有“.htaccess”重命名为“.user.ini”?
      • 不,.user.ini 的语法不同(不需要 php_flag 指令)
      • 在我的托管公司,有一台装有 CentOS 和 PHP 5.6 的机器,这很好,然后 PHP 7 出来了,我需要在 PHP 5 和 PHP 7 上运行一些 vHost ,所以他们在 vHost 中为 PHP 7 设置了“SetHandler”,但是现在我从我的应用程序发送的 X-FRAME-OPTION 标头没有通过处理程序发送到浏览器,有什么建议吗?跨度>
      【解决方案5】:

      安装所有必要的存储库和软件包

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

      【讨论】:

      • cgi 包装器是(恕我直言)不推荐使用的 wau,最好使用 SetHandler 代理方式,将添加另一个答案。
      • 在 Centos 6.9 和 apache 2.2 中为我工作(有很多变化)。赞成:)
      • eh - 不要将它与其他 repos 混合(例如 webtatic^^) - 在禁用其他 repo 后,它运行顺利,非常感谢!
      【解决方案6】:

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

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

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

      【讨论】:

      • 是的,你分享的 url 是我想要的 .. 但没有显示完整的过程.. 我猜它是 ubuntu 的.. 我是新手.. 没有帮助就做不到..
      • 是否有任何理由需要在同一个 apache 中运行两个版本的 php?在两个不同的 apache 但在同一台机器上运行它们是不可行的吗?我认为在大多数用例中,这非常接近您的需求,并且是一种更容易、更安全的长期管理解决方案。
      • actullay 这是我老师给我的任务..我想做的很糟糕..我不能退缩..如果你找到 cgi mod 的解决方案,请告诉我..!!
      • 我花了一些时间来尝试这个并让它在 centos7 上运行,请参阅下面的新答案,希望对您有所帮助!
      猜你喜欢
      • 2020-05-09
      • 2014-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-12
      • 2018-12-24
      相关资源
      最近更新 更多