插件窝 干货文章 Nginx和Apache怎么配置多版本PHP

Nginx和Apache怎么配置多版本PHP

PHP 版本 FPM 配置 318    来源:    2025-04-22

Nginx和Apache配置多版本PHP指南

Nginx配置多版本PHP

方法1:使用不同的PHP-FPM监听端口/套接字

  1. 安装多个PHP版本

    # Ubuntu/Debian
    sudo apt install php7.4-fpm php8.0-fpm php8.1-fpm
    
    # CentOS/RHEL
    sudo yum install php74-php-fpm php80-php-fpm php81-php-fpm
    
  2. 配置PHP-FPM: 每个PHP版本有独立的配置文件,通常位于:

    /etc/php/7.4/fpm/pool.d/www.conf
    /etc/php/8.0/fpm/pool.d/www.conf
    

    确保每个版本监听不同的端口或套接字:

    listen = /run/php/php7.4-fpm.sock
    listen = /run/php/php8.0-fpm.sock
    
  3. Nginx服务器块配置

    server {
       listen 80;
       server_name site1.example.com;
    
       location ~ \.php$ {
           include snippets/fastcgi-php.conf;
           fastcgi_pass unix:/run/php/php7.4-fpm.sock;
       }
    }
    
    server {
       listen 80;
       server_name site2.example.com;
    
       location ~ \.php$ {
           include snippets/fastcgi-php.conf;
           fastcgi_pass unix:/run/php/php8.0-fpm.sock;
       }
    }
    

方法2:基于位置路径区分PHP版本

server {
    listen 80;
    server_name example.com;

    # PHP 7.4 用于 /legacy/ 路径
    location ~ ^/legacy/.+\.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    }

    # PHP 8.0 用于其他路径
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.0-fpm.sock;
    }
}

Apache配置多版本PHP

方法1:使用不同的PHP-FPM实例

  1. 安装多个PHP版本(同Nginx部分)

  2. 配置Apache虚拟主机

    <VirtualHost *:80>
       ServerName site1.example.com
    
       <FilesMatch \.php$>
           SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost"
       </FilesMatch>
    </VirtualHost>
    
    <VirtualHost *:80>
       ServerName site2.example.com
    
       <FilesMatch \.php$>
           SetHandler "proxy:unix:/run/php/php8.0-fpm.sock|fcgi://localhost"
       </FilesMatch>
    </VirtualHost>
    

方法2:使用PHP模块(mod_php)

  1. 启用不同PHP版本模块

    sudo a2dismod php7.4
    sudo a2enmod php8.0
    sudo systemctl restart apache2
    
  2. 使用.htaccess指定PHP版本

    <IfModule mod_php7.c>
       # PHP 7 配置
    </IfModule>
    
    <IfModule mod_php8.c>
       # PHP 8 配置
    </IfModule>
    

方法3:基于目录的PHP版本选择

<VirtualHost *:80>
    ServerName example.com

    <Directory "/var/www/html/legacy">
        <FilesMatch \.php$>
            SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost"
        </FilesMatch>
    </Directory>

    <Directory "/var/www/html">
        <FilesMatch \.php$>
            SetHandler "proxy:unix:/run/php/php8.0-fpm.sock|fcgi://localhost"
        </FilesMatch>
    </Directory>
</VirtualHost>

通用注意事项

  1. 重启服务

    # Nginx
    sudo systemctl restart nginx
    
    # PHP-FPM
    sudo systemctl restart php7.4-fpm php8.0-fpm
    
    # Apache
    sudo systemctl restart apache2
    
  2. 验证PHP版本: 创建phpinfo.php文件:

    <?php phpinfo(); ?>
    

    访问该文件查看当前使用的PHP版本

  3. 兼容性检查

    • 确保应用程序与所选PHP版本兼容
    • 检查PHP扩展是否在所有版本中都可用
  4. 性能考虑

    • 使用Unix套接字通常比TCP端口更快
    • 监控每个PHP-FPM池的资源使用情况

通过以上配置,您可以根据不同网站、目录或路径灵活地使用不同版本的PHP。