插件窝 干货文章 Linux系统下如何为Nginx安装多版本PHP

Linux系统下如何为Nginx安装多版本PHP

PHP 版本 FPM 不同 241    来源:    2025-04-27

在Linux系统下为Nginx安装多版本PHP

在Nginx服务器上运行多个PHP版本是常见的需求,特别是当您需要同时支持不同项目使用不同PHP版本时。以下是详细的安装和配置方法:

方法一:使用PHP-FPM和不同端口/Socket

1. 安装多个PHP版本

以Ubuntu/Debian为例:

# 添加PHP PPA仓库
sudo add-apt-repository ppa:ondrej/php
sudo apt update

# 安装不同PHP版本及其FPM模块
sudo apt install php7.4 php7.4-fpm php7.4-cli php7.4-common php7.4-mysql
sudo apt install php8.0 php8.0-fpm php8.0-cli php8.0-common php8.0-mysql
sudo apt install php8.1 php8.1-fpm php8.1-cli php8.1-common php8.1-mysql

2. 检查PHP-FPM服务状态

systemctl status php7.4-fpm
systemctl status php8.0-fpm
systemctl status php8.1-fpm

3. 配置Nginx使用不同PHP版本

编辑Nginx站点配置文件(通常在/etc/nginx/sites-available/目录下):

# 对于PHP 7.4
server {
    listen 80;
    server_name site1.example.com;

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    }
}

# 对于PHP 8.0
server {
    listen 80;
    server_name site2.example.com;

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.0-fpm.sock;
    }
}

方法二:使用PHP-FPM和不同目录

1. 配置不同PHP版本监听不同Socket

编辑PHP-FPM配置文件(通常在/etc/php/[version]/fpm/pool.d/www.conf):

; 对于PHP 7.4
listen = /run/php/php7.4-fpm.sock

; 对于PHP 8.0
listen = /run/php/php8.0-fpm.sock

2. 基于目录的Nginx配置

server {
    listen 80;
    server_name example.com;

    # PHP 7.4处理/php74/目录下的请求
    location ~ ^/php74/.*\.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    }

    # PHP 8.0处理其他PHP请求
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.0-fpm.sock;
    }
}

方法三:使用Docker容器

对于更复杂的多版本需求,可以考虑使用Docker:

# 运行不同PHP版本的容器
docker run -d --name php74 -v /path/to/app1:/var/www/html -p 9074:9000 php:7.4-fpm
docker run -d --name php80 -v /path/to/app2:/var/www/html -p 9080:9000 php:8.0-fpm

然后在Nginx配置中:

location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9074; # 对于PHP 7.4
    # 或
    fastcgi_pass 127.0.0.1:9080; # 对于PHP 8.0
}

验证安装

创建测试文件info.php

<?php phpinfo(); ?>

访问不同站点或路径,检查显示的PHP版本是否正确。

常见问题解决

  1. 502 Bad Gateway错误

    • 检查PHP-FPM服务是否运行
    • 检查Nginx配置中的Socket路径是否正确
    • 确保www-data用户(或其他Nginx运行用户)有权限访问Socket文件
  2. 权限问题

    sudo chown -R www-data:www-data /var/www/html
    sudo chmod -R 755 /var/www/html
    
  3. PHP模块缺失: 为每个PHP版本安装所需模块:

    sudo apt install php7.4-[module] php8.0-[module]
    

通过以上方法,您可以灵活地在同一台服务器上运行多个PHP版本,满足不同项目的需求。