Apache+PHP 如何为每个VHost配置使用不同的已安装PHP版本?
解决Apache多站点指定不同PHP版本的方案
完全可以实现每个VHost独立指定PHP版本,你之前操作繁琐是因为用了Apache的mod_php模块,该模块只能全局生效,换成**PHP-FPM(FastCGI进程管理器)**搭配Apache的proxy_fcgi模块即可实现站点级的PHP版本隔离。
操作步骤
1. 安装对应版本的PHP-FPM
你需要先安装用到的所有PHP版本对应的FPM包,Ubuntu下可通过ppa:ondrej/php源安装多版本PHP,对应命令:
# 若还没添加ondrej/php源先执行 sudo add-apt-repository ppa:ondrej/php sudo apt update # 安装你需要的版本FPM包 sudo apt install php5.6-fpm php7.4-fpm php8.0-fpm
2. 调整Apache模块配置
首先禁用所有版本的mod_php,启用FPM需要的代理模块:
# 禁用所有mod_php版本 sudo a2dismod php* # 启用必要模块 sudo a2enmod proxy proxy_fcgi setenvif # 重启Apache使模块配置生效 sudo systemctl restart apache2
3. 为每个VHost指定PHP版本
编辑你的VHost配置文件(一般存放在/etc/apache2/sites-available/目录下),在对应站点的<VirtualHost>标签内添加对应PHP版本的FPM处理器配置即可,示例如下:
example1.local(PHP7.4)配置示例
<VirtualHost *:80> ServerName example1.local DocumentRoot /var/www/example1 <Directory /var/www/example1> AllowOverride All Require all granted </Directory> # 指定使用PHP7.4-FPM <FilesMatch \.php$> SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost" </FilesMatch> </VirtualHost>
其他站点对应配置修改
只需要修改上面SetHandler行里的sock文件名即可:
- example2.local、example3.local用PHP8.0:替换为
php8.0-fpm.sock - example4.local用PHP5.6:替换为
php5.6-fpm.sock
4. 生效配置
所有VHost修改完成后,先检查配置语法是否正确:
sudo apache2ctl configtest
返回Syntax OK后重载Apache即可生效:
sudo systemctl reload apache2
注意事项
- 需确保对应版本的PHP-FPM服务处于运行状态,可执行
sudo systemctl status php<版本号>-fpm查看,异常时可执行sudo systemctl start php<版本号>-fpm启动,需要开机自启可执行sudo systemctl enable php<版本号>-fpm - 各PHP版本的配置文件独立,比如PHP7.4的php.ini路径为
/etc/php/7.4/fpm/php.ini,修改对应版本的配置后只需重启对应FPM服务即可,无需重启Apache
内容的提问来源于stack exchange,提问作者bernhardh
相关产品推荐
相关产品推荐

