You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在RHEL 8的Apache环境下同时运行多版本PHP?

解决RHEL 8 Apache环境下PHP 8.1与8.2并行运行问题

一、修复安装冲突:改用Remi并行安装包

DNF模块无法同时启用多个PHP版本,这是安装冲突的核心原因。需卸载现有模块安装的PHP,改用Remi仓库的并行安装包:

  1. 卸载已安装的PHP模块:
    sudo dnf module remove php:8.1 php:8.2
    sudo dnf reset php
    
  2. 安装并启用Remi仓库(未安装时执行):
    sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm -y
    sudo dnf config-manager --set-enabled remi
    
  3. 并行安装PHP 8.1和8.2的FPM及常用扩展:
    # 安装PHP 8.1 FPM及扩展
    sudo dnf install php81-php-fpm php81-php-cli php81-php-mysqlnd php81-php-gd php81-php-xml -y
    # 安装PHP 8.2 FPM及扩展
    sudo dnf install php82-php-fpm php82-php-cli php82-php-mysqlnd php82-php-gd php82-php-xml -y
    
    这类包采用phpXX-php-*命名格式,各版本文件独立存储在/opt/remi/phpXX/目录,不会产生冲突。

二、配置Apache虚拟主机使用不同PHP版本

mod_php仅支持单版本运行,必须通过PHP-FPM配合Apache的proxy_fcgi模块实现多版本隔离:

  1. 启用Apache必需模块:
    sudo dnf install httpd mod_proxy mod_proxy_fcgi -y
    sudo systemctl enable --now httpd
    
  2. 配置并启动PHP-FPM服务:
    • 确认两个版本的FPM监听套接字(默认路径如下,可通过配置文件验证):
      cat /etc/opt/remi/php81/php-fpm.d/www.conf | grep listen
      cat /etc/opt/remi/php82/php-fpm.d/www.conf | grep listen
      
    • 启动并设置开机自启:
      sudo systemctl enable --now php81-php-fpm
      sudo systemctl enable --now php82-php-fpm
      
  3. 创建虚拟主机配置文件:
    • PHP 8.1站点配置(/etc/httpd/conf.d/php81-site.conf):
      <VirtualHost *:80>
          ServerName php81.example.com
          DocumentRoot /var/www/php81-site
      
          <Directory /var/www/php81-site>
              AllowOverride All
              Require all granted
          </Directory>
      
          # 将PHP请求转发至PHP 8.1 FPM
          <FilesMatch \.php$>
              SetHandler "proxy:unix:/run/php81-php-fpm.sock|fcgi://localhost"
          </FilesMatch>
      
          ErrorLog /var/log/httpd/php81-site-error.log
          CustomLog /var/log/httpd/php81-site-access.log combined
      </VirtualHost>
      
    • PHP 8.2站点配置(/etc/httpd/conf.d/php82-site.conf):
      <VirtualHost *:80>
          ServerName php82.example.com
          DocumentRoot /var/www/php82-site
      
          <Directory /var/www/php82-site>
              AllowOverride All
              Require all granted
          </Directory>
      
          # 将PHP请求转发至PHP 8.2 FPM
          <FilesMatch \.php$>
              SetHandler "proxy:unix:/run/php82-php-fpm.sock|fcgi://localhost"
          </FilesMatch>
      
          ErrorLog /var/log/httpd/php82-site-error.log
          CustomLog /var/log/httpd/php82-site-access.log combined
      </VirtualHost>
      
  4. 创建站点目录并生成测试文件:
    # PHP 8.1站点
    sudo mkdir -p /var/www/php81-site
    echo "<?php phpinfo(); ?>" | sudo tee /var/www/php81-site/info.php
    sudo chown -R apache:apache /var/www/php81-site
    
    # PHP 8.2站点
    sudo mkdir -p /var/www/php82-site
    echo "<?php phpinfo(); ?>" | sudo tee /var/www/php82-site/info.php
    sudo chown -R apache:apache /var/www/php82-site
    
  5. 重启Apache使配置生效:
    sudo systemctl restart httpd
    

三、独立管理CLI版本(与Apache互不干扰)

并行安装的PHP CLI版本分别位于/opt/remi/php81/bin/php和/opt/remi/php82/bin/php,可通过以下方式管理:

  1. 使用alternatives设置默认CLI版本(可选):
    sudo alternatives --install /usr/bin/php php /opt/remi/php81/bin/php 1
    sudo alternatives --install /usr/bin/php php /opt/remi/php82/bin/php 2
    # 切换默认版本
    sudo alternatives --config php
    
  2. 直接使用绝对路径调用指定版本:
    # 调用PHP 8.1 CLI
    /opt/remi/php81/bin/php script.php
    # 调用PHP 8.2 CLI
    /opt/remi/php82/bin/php script.php
    
  3. 为常用版本创建别名(可选,编辑~/.bashrc或~/.zshrc):
    alias php81='/opt/remi/php81/bin/php'
    alias php82='/opt/remi/php82/bin/php'
    
    执行source ~/.bashrc使别名生效。

四、最佳实践

  • 禁用mod_php:mod_php会将PHP嵌入Apache进程,仅支持单版本,多版本场景必须使用PHP-FPM。
  • 定期更新:通过dnf update更新PHP包时,并行安装的版本会各自独立更新,互不影响。
  • 权限检查:确保PHP-FPM运行用户(默认apache)对站点目录拥有读写权限,避免文件访问错误。
  • 日志排查:若虚拟主机无法解析PHP,优先检查Apache错误日志(/var/log/httpd/目录下对应文件)和PHP-FPM日志(/var/log/opt/remi/phpXX/php-fpm/目录)。

内容的提问来源于stack exchange,提问作者Root

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 23:30:03