如何在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_workermpm_event

对于我在debian上的全面工作:

  1. 禁用prefork,启用事件: a2dismod mpm_prefork && a2enmod mpm_event
  2. 删除mod-php5: aptitude remove libapache2-mod-php5
  3. 请注意,您的VHost中的每个php_选项都由封装,否则apache将不会重启
  4. service apache2 restart

在apache配置文件的“加载模块”部分中查找以下内容:

 LoadModule mpm_event_module modules/mod_mpm_event.so 

并用以下模块替换它:

 LoadModule mpm_prefork_module modules/mod_mpm_prefork.so