在腾讯云轻量应用服务器(Lighthouse)上配置多个 PHP 版本共存,核心思路是使用独立目录安装不同版本的 PHP,并通过 Nginx/Apache + FastCGI/PHP-FPM 为每个站点指定对应的 PHP 版本。以下是基于 Linux(以 Ubuntu/Debian/CentOS 为例)的详细操作步骤:
✅ 前提条件
- 已登录轻量服务器 SSH
- 已安装 Nginx 或 Apache(推荐 Nginx + PHP-FPM)
- 有
sudo权限
🔧 方案一:使用 php-yarn / apt 多版本管理(推荐,适合 Debian/Ubuntu)
步骤 1:添加 PHP PPA 源(Ubuntu/Debian)
# 更新系统
sudo apt update && sudo apt upgrade -y
# 安装必要工具
sudo apt install software-properties-common -y
# 添加 Ondřej Surý 的 PHP PPA(官方维护,支持多版本)
sudo add-apt-repository ppa:ondrej/php
sudo apt update
步骤 2:安装多个 PHP 版本
例如安装 PHP 7.4、8.0、8.3:
sudo apt install php7.4-fpm php7.4-cli php7.4-mysql
php8.0-fpm php8.0-cli php8.0-mysql
php8.3-fpm php8.3-cli php8.3-mysql
php-common -y
💡 注意:各版本 FPM 服务名不同,如
php7.4-fpm、php8.0-fpm、php8.3-fpm
步骤 3:启动并设置开机自启
sudo systemctl enable --now php7.4-fpm
sudo systemctl enable --now php8.0-fpm
sudo systemctl enable --now php8.3-fpm
验证运行状态:
systemctl status php* | grep active
🌐 方案二:Nginx 虚拟主机配置(关键!)
假设你有两个网站:
site-a.com→ 使用 PHP 8.0site-b.com→ 使用 PHP 8.3
1️⃣ 创建站点配置目录(可选但推荐)
sudo mkdir -p /etc/nginx/sites-available
sudo ln -s /etc/nginx/sites-available/site-a.conf /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/site-b.conf /etc/nginx/sites-enabled/
2️⃣ 编写 site-a.conf(使用 PHP 8.0)
server {
listen 80;
server_name site-a.com www.site-a.com;
root /var/www/site-a/public_html;
index index.php index.html;
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.0-fpm.sock; # 👈 指定对应版本 socket
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 其他常规配置...
}
3️⃣ 编写 site-b.conf(使用 PHP 8.3)
server {
listen 80;
server_name site-b.com www.site-b.com;
root /var/www/site-b/public_html;
index index.php index.html;
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock; # 👈 切换版本
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
✅ 测试配置并重载 Nginx:
sudo nginx -t
sudo systemctl reload nginx
🔍 验证是否生效
在每个网站根目录下创建 info.php:
<?php phpinfo(); ?>
访问 http://your-ip/info.php,查看输出的 PHP Version 是否与预期一致。
⚠️ 注意:若使用 Apache,则通过
.htaccess或<VirtualHost>中的SetHandler application/x-httpd-php80等方式指定版本,原理类似。
🛠 进阶技巧 & 注意事项
| 项目 | 说明 |
|---|---|
| Socket vs TCP | 默认用 Unix Socket(/run/php/phpXX-fpm.sock),性能更好;也可改用 127.0.0.1:90XX(需修改 FPM 监听配置) |
| FPM 日志 | 查看 /var/log/php*/fpm.log 排查错误 |
| 扩展兼容性 | 不同 PHP 版本对扩展支持不同(如 redis、memcached),需分别安装对应版本扩展包 |
| Composer 多版本 | 可用 phpenv 或手动下载不同版本 Composer 到不同目录,配合 phpX.Y 调用 |
| 安全建议 | 关闭未使用 PHP 版本的 FPM 服务:sudo systemctl disable --now php7.4-fpm |
❓常见问题
Q:为什么 fastcgi_pass 找不到 socket?
A:检查 FPM 是否在运行:systemctl status php8.0-fpm;确认 socket 路径:ls /run/php/php8.0-fpm.sock;若不存在,检查 www.conf 中 listen = /run/php/php8.0-fpm.sock 是否被注释。
Q:能否用 Docker 隔离多版本?
A:可以!更灵活但稍复杂。例如:
docker run -d --name php80 -p 8080:80 php:8.0-apache
docker run -d --name php83 -p 8081:80 php:8.3-apache
再通过 Nginx 反向X_X分发请求。适合需要完全隔离环境的场景。
如需我为你生成一个完整的自动化部署脚本(含 Nginx 配置模板 + 多版本安装),欢迎告诉我你的操作系统和所需 PHP 版本列表 😊
ECLOUD博客