PHP 多版本共存与按站点切换
发布时间:2026-06-27 10:45       
更新时间:2026-06-27 20:59
一台机器同时跑 PHP 7.4 和 8.2 完全可行,关键是让两个版本的 php-fpm 各跑各的进程池,Nginx 按站点把请求转发给对应的池,互不干扰。
准备:装两套 fpm
Ubuntu 用 apt install php7.4-fpm php8.2-fpm 直接装两套,CentOS 加第三方 yum 源同理。注意扩展跟着版本走,两个版本要分别安装,比如 php8.2-mysql、php7.4-gd 各装各的。准备切换版本的站点,先核对它用到的扩展在新版本下是否都有对应包。还有一个常见误区:php -v 看到的是命令行 CLI 的版本,站点实际用的是 php-fpm 的版本,两者可以不同,定时任务走 CLI 时行为也可能和页面上不一样,验证时别看串了。
确认两个池的监听通道
两套 fpm 默认监听不同的 socket,路径形如 /run/php/php7.4-fpm.sock 和 /run/php/php8.2-fpm.sock。如果改成了监听 TCP 端口的方式,两个版本必须用不同端口,同端口会起不来。先确认两个服务都在跑:
systemctl status php7.4-fpm php8.2-fpm
站点按需指向
Nginx 站点配置里改 fastcgi_pass 一行,就能切到另一个版本:
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
其他配置不动,nginx -t 通过后 reload 即生效,不需要重启任何 fpm,反向切换同理。建议顺手用表格记下每个站点用的版本,半年后不用对着配置逐个猜。切换后站点报 502 的话,先看 Nginx 错误日志:connect() to unix:/run/... failed 基本就是 socket 路径写错,或者对应版本的 fpm 没在运行。
用 phpinfo 验证
站点根目录放一个探测文件 test.php,内容一行: