如何在Ubuntu 14.04上使用线程安全的PHP启用事件MPM Apache 2.4?
我升级到Ubuntu Server 14.04,期望默认的apache安装将使用新的事件MPM,但我发现旧的内存吃prefork。
我已经在Arch Linux中成功设置了事件MPM,但我没有在Ubuntu上这样做。 我一直在:
Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP
我已经安装了php-fpm
,并配置了apache2来使用它,但由于apache2的配置文件在Ubuntu上有所不同,我不太确定我是否在正确的地方做它。
有关如何使PHP线程安全的任何想法,所以我可以使用apache2 event-mpm? (当然,无需手动重新编译php)
要禁用event MPM
,你可以执行sudo a2dismod mpm_event
,然后启用prefork
,你应该执行sudo a2enmod mpm_prefork
。
最后重启apache:
sudo service apache2 restart
这对我有用。
首先检查您是否安装了此软件包:
dpkg -l | grep libapache2-mod-php5
如果你有它只是删除它:
apt-get remove libapache2-mod-php5
您可以安装多种方式让Apache与PHP并行通信。 也许你已经(仍然)安装了旧的mod_php,另外还有fastcgi / php-fpm。
您可以看到Apache在运行时加载了哪些模块
apache2ctl -M
如果需要,请使用sudo
获取root权限。 如果您在Apache当前使用的模块中看到php5_module (shared)
,则仍会安装旧的mod_php并阻止您使用mpm_worker
或mpm_event
。
对于我在debian上的全面工作:
- 禁用prefork,启用事件:
a2dismod mpm_prefork && a2enmod mpm_event
- 删除mod-php5:
aptitude remove libapache2-mod-php5
- 请注意,您的VHost中的每个
php_
选项都由
封装,否则apache将不会重启 - 做
service apache2 restart
在apache配置文件的“加载模块”部分中查找以下内容:
LoadModule mpm_event_module modules/mod_mpm_event.so
并用以下模块替换它:
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so