在腾讯云轻量应用服务器上配置多个 PHP 版本共存,可以满足不同项目对不同 PHP 版本的需求(如 Laravel 项目需要 PHP 8.1,而老系统只能运行在 PHP 7.4)。以下是详细的配置方法,适用于 Ubuntu/Debian 系统。
📌 前提条件
- 腾讯云轻量服务器已部署 Linux 系统(以 Ubuntu 20.04/22.04 为例)
- 已安装 Nginx 或 Apache(本文以 Nginx 为例)
- 具有 root 权限或 sudo 权限
✅ 步骤一:添加 Ondřej Surý 的 PHP PPA 源
Ubuntu 官方源中的 PHP 版本较旧,建议使用 Ondřej 提供的 PPA 源来安装多个 PHP 版本。
# 安装软件属性工具
sudo apt install -y software-properties-common
# 添加 Ondřej 的 PHP PPA
sudo add-apt-repository ppa:ondrej/php -y
# 更新包列表
sudo apt update
⚠️ 注意:该 PPA 支持多个 PHP 版本共存,包括 7.4、8.0、8.1、8.2、8.3 等。
✅ 步骤二:安装多个 PHP 版本
安装你所需的多个 PHP 版本及常用扩展:
# 安装 PHP 7.4 和扩展
sudo apt install -y php7.4 php7.4-fpm php7.4-mysql php7.4-curl php7.4-gd php7.4-mbstring php7.4-xml php7.4-zip
# 安装 PHP 8.1
sudo apt install -y php8.1 php8.1-fpm php8.1-mysql php8.1-curl php8.1-gd php8.1-mbstring php8.1-xml php8.1-zip
# 安装 PHP 8.2(可选)
sudo apt install -y php8.2 php8.2-fpm php8.2-mysql php8.2-curl php8.2-gd php8.2-mbstring php8.2-xml php8.2-zip
✅
phpX.X-fpm是关键,用于与 Nginx 配合实现多版本切换。
✅ 步骤三:启动并启用 FPM 服务
每个 PHP 版本的 FPM 会监听不同的 socket 文件(或端口):
# 启动并设置开机自启
sudo systemctl enable php7.4-fpm
sudo systemctl enable php8.1-fpm
sudo systemctl start php7.4-fpm
sudo systemctl start php8.1-fpm
检查状态:
sudo systemctl status php7.4-fpm
sudo systemctl status php8.1-fpm
✅ 步骤四:配置 Nginx 使用不同 PHP 版本
通过为不同网站配置不同的 fastcgi_pass,指定对应的 PHP-FPM socket。
示例 1:站点 A 使用 PHP 7.4
编辑 Nginx 配置文件(例如 /etc/nginx/sites-available/site-a):
server {
listen 80;
server_name site-a.example.com;
root /var/www/site-a;
index index.php index.html;
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
示例 2:站点 B 使用 PHP 8.1
server {
listen 80;
server_name site-b.example.com;
root /var/www/site-b;
index index.php index.html;
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
启用站点配置
sudo ln -s /etc/nginx/sites-available/site-a /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/site-b /etc/nginx/sites-enabled/
# 测试配置并重载 Nginx
sudo nginx -t
sudo systemctl reload nginx
✅ 步骤五:验证 PHP 版本
在对应站点根目录创建 info.php:
<?php
phpinfo();
访问 http://site-a.example.com/info.php 应显示 PHP 7.4
访问 http://site-b.example.com/info.php 应显示 PHP 8.1
✅ 可选:命令行切换默认 PHP 版本(CLI)
如果你希望在终端中切换 php 命令的默认版本,使用 update-alternatives:
sudo update-alternatives --set php /usr/bin/php7.4
# 或
sudo update-alternatives --set php /usr/bin/php8.1
或者交互式选择:
sudo update-alternatives --config php
✅ 常见问题排查
| 问题 | 解决方案 |
|---|---|
| 502 Bad Gateway | 检查 fastcgi_pass 路径是否正确,确认对应 PHP-FPM 是否运行 |
php-fpm.sock 不存在 |
检查 /run/php/phpX.X-fpm.sock 是否存在,确认服务已启动 |
| Nginx 报错权限 | 确保 socket 文件权限正确,一般由 www-data 用户组管理 |
✅ 总结
通过以下方式实现多 PHP 版本共存:
- 使用 Ondřej PPA 安装多个 PHP-FPM
- 每个版本独立运行 FPM 服务
- Nginx 针对不同站点配置不同的
fastcgi_pass - CLI 可通过
update-alternatives切换默认版本
这样即可在腾讯云轻量服务器上安全、高效地运行多个 PHP 版本,满足不同项目的开发和部署需求。
如有需要,我也可以提供一键脚本或 Docker 方案。欢迎继续提问!
云小栈