如何仅为单个虚拟主机禁用PHP-FPM并使用PHP 7.4?
如何仅为单个虚拟主机禁用PHP-FPM并使用PHP 7.4?
嗨,我完全理解你的困扰——有时候特定的应用集成(比如你这个Prestashop和代发货平台的对接)就是对FPM有奇怪的兼容性问题,非得换一种PHP运行方式才行。在Ubuntu 22.04上,你可以为单个虚拟主机配置使用PHP 7.4的CGI模式(而非FPM),同时不影响其他虚拟主机的FPM设置,具体步骤如下:
1. 安装PHP 7.4 CGI组件
首先确保你的服务器上安装了PHP 7.4的CGI版本:
sudo apt update sudo apt install php7.4-cgi
这会安装PHP 7.4的CGI执行程序,用来处理PHP请求而无需FPM。
2. 修改目标虚拟主机的配置
找到你的Prestashop虚拟主机配置文件(通常位于/etc/apache2/sites-available/目录下,比如命名为prestashop.conf),用编辑器打开:
sudo nano /etc/apache2/sites-available/prestashop.conf
在<VirtualHost>块内,先移除之前设置的FPM相关<FilesMatch>规则,然后添加以下配置来启用PHP 7.4 CGI:
# 清除之前的FPM处理规则,避免冲突 <FilesMatch "\.php$"> SetHandler None </FilesMatch> # 配置PHP 7.4 CGI处理逻辑 AddHandler php74-cgi .php Action php74-cgi /php74-cgi ScriptAlias /php74-cgi /usr/bin/php-cgi7.4 # 确保CGI脚本的访问权限 <Location "/php74-cgi"> Require all granted </Location>
3. 验证配置并重启Apache
先检查Apache配置是否有语法错误:
sudo apache2ctl configtest
如果输出Syntax OK,就可以重启Apache使配置生效:
sudo systemctl restart apache2
4. 确认配置生效
在你的Prestashop根目录创建一个临时的phpinfo.php文件,内容如下:
<?php phpinfo(); ?>
通过浏览器访问这个文件,找到Server API这一行,它应该显示为CGI/FastCGI(而非FPM相关的内容),同时确认PHP Version是7.4。确认无误后记得删除这个文件,避免安全风险。
注意事项
- CGI模式和FPM的运行机制不同,CGI会为每个PHP请求启动一个新进程,性能上比FPM稍差,但对于单个虚拟主机来说,这种差异通常可以接受。
- 如果你需要调整PHP 7.4的配置(比如内存限制、上传大小等),可以编辑
/etc/php/7.4/cgi/php.ini文件,修改后重启Apache即可生效。
备注:内容来源于stack exchange,提问作者gabrieledeluca




