安装 httpd24、php56 和 php70,因为 SCL 无法正常工作,并出现错误“找不到文件”

安装 httpd24、php56 和 php70,因为 SCL 无法正常工作,并出现错误“找不到文件”

让我先说我读过在 Remi Blog 上,因为问题与这些存储库有关。博客条目对我根本没有帮助,或者我在这里遗漏了一些东西,但我不确定是什么。我将在下面揭示我遵循的步骤,让我们看看我做错了什么。我计划将 PHP 5.6.x 和 PHP 7.0 安装为 SCL(因为我需要在两者上测试一些应用程序,并且由于一些 Wordpress 开发,我需要保留 PHP 5.6.x 支持),我将通过 SetHandler 使用 Apache 2.4.x,因此下面是步骤:

  1. 安装软件集合工具:

    yum install scl-utils
    
  2. 下载一个包含适用于您系统的存储库的包(在本例中为 httpd24)

    wget http://www.softwarecollections.org/en/scls/rhscl/httpd24/epel-6-x86_64/download/rhscl-httpd24-epel-6-x86_64.noarch.rpm
    
  3. 安装 repo 包:

    yum install rhscl-httpd24-epel-6-x86_64.noarch.rpm
    
  4. 安装集合:

    yum install httpd24
    
  5. 开始使用软件集合:

    scl enable httpd24 bash
    
  6. 启动httpd24服务(默认选项)

    service httpd24-httpd start
    
  7. 将 PHP56 安装为 SCL:

    yum install php56 php56-php-common php56-php-cli php56-php-fpm php56-php-gd php56-php-intl php56-php-mbstring php56-php-mcrypt php56-php-opcache php56-php-pdo php56-php-pear php56-php-pecl-apcu php56-php-imagick php56-php-pecl-xdebug php56-php-pgsql php56-php-xml php56-php-mysqlnd php56-php-pecl-jsonc php56-php-pecl-zip php56-php-process php56-runtime
    
  8. 启动PHP56-FPM:

    service php56-php-fpm start
    
  9. 将 PHP70 安装为 SCL:

    yum install php70 php70-php-common php70-php-cli php70-php-fpm php70-php-gd php70-php-intl php70-php-mbstring php70-php-mcrypt php70-php-opcache php70-php-pdo php70-php-pear php70-php-pecl-apcu php70-php-imagick php70-php-pecl-xdebug php70-php-pgsql php70-php-xml php70-php-mysqlnd php70-php-pecl-jsonc php70-php-pecl-zip php70-php-process php70-runtime
    
  10. 测试 Apache 是否安装并运行:

    http://mylocalip 
    

成功后,我可以看到 RedHat/CentOS 的 Apache 默认页面。到目前为止一切顺利。我/var/www/html/info.php使用以下代码创建了一个文件:

    <?php
     phpinfo();
    ?>

当我尝试通过跑步到达时:

http://mylocalip/info.php

它说文件未找到,所以 Apache 转到了错误的地方,没关系,然后我编辑下面的文件,/opt/rh/httpd24/root/etc/httpd/conf/httpd.conf并将它更改为,DocumentRoot我在任何地方都做了同样的更改,我发现了相同的/opt/rh/httpd24/root/var/www/html/var/www/html问题,我重新启动了 Apache 并再次尝试,但仍然出现同样的错误。我检查了权限/var/www/html,如下所示:

# ls -l /var/www/
drwxrwsr-x 3 apache root 4096 Nov 13 04:51 html

我在这里错过了什么?我做错了什么?有人能给我一些想法或帮助吗?

答案1

我已经测试了相同的步骤,它对我有用:(

请检查您是否已将所有内容(且仅将 /opt/rh/httpd24/root/var/www 更改为 /var/www(尽管我不太明白您为什么要这样做):

# grep www /opt/rh/httpd24/root/etc/httpd/conf/httpd.conf | grep -v "^#"
DocumentRoot "/var/www/html"
<Directory "/var/www">
<Directory "/var/www/html">
    # Redirect permanent /foo http://www.example.com/bar
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
<Directory "/var/www/cgi-bin">

然后,上述步骤中缺少:切换 php70-php-fpm 以监听另一个端口(对我来说是 9002),并为其设置正确的 SELInux:

# semanage port -a -t http_port_t -p tcp 9002

然后,我创建 2 个名称(el6php56 和 el6php70)用于 vhost 管理,并添加 Apache 配置文件以将每个 vhost 中的 PHP 文件重定向到正确的 FPM 服务:

# cat /opt/rh/httpd24/root/etc/httpd/conf.d/vhost.conf 
<VirtualHost *:80>
    ServerName el6php56
    <FilesMatch \.php$>
        SetHandler "proxy:fcgi://127.0.0.1:9000"
    </FilesMatch>
</VirtualHost>

<VirtualHost *:80>
    ServerName el6php70
    <FilesMatch \.php$>
        SetHandler "proxy:fcgi://127.0.0.1:9002"
    </FilesMatch>
</VirtualHost>

然后(默认/第一个虚拟主机将使用 php 5.6)

答案2

我自己也遇到过这种情况。我发现您使用的是 /opt/rh/httpd24/root/var/www 而不是 /var/www,因为您想使用 httpd24-http。据我所知,SELinux 处理 /opt/rh/httpd24/root/var/www 和 /var/www 的方式有所不同。尝试使用“setenforce 0”检查这是否是 SELinux 问题。使用“setenforce 1”恢复强制执行。

php70 配置在这里:/etc/opt/rh/rh-php70

相关内容