启动Apache时出现错误,httpd: 配置错误:加载了多个MPM。

23

当我尝试启动Apache服务器时,我得到了以下信息, 我已经构建了2.4.6版本并放置在本地位置。

[apacheas@twproxy1 bin]$ ./apachectl -k start
AH00534: httpd: Configuration error: More than one MPM loaded.

根据一些网站提供的信息,我尝试将可用的模块(不确定!)列在下面。

[apacheas@twproxy1 bin]$ ./httpd -l

Compiled in modules:
  core.c
  mod_so.c
  http_core.c
  event.c

出了什么问题?

这与openssl中最近的Heart Bleed漏洞有关--我们被建议升级apache和openssl版本。我们已经做了所有的事情,但是遇到了上述问题。


这是由于在httpd.conf中添加的Load Module mpm行导致的 - 我只是注释掉了这一行,之后一切都很完美。 - Rajesh Balan
4个回答

37

检查位于 mods-enabled 目录下的所有已启用模块。如果您已经启用了 mpm_prefork 模块,则应禁用 worker 模块。

sudo a2dismod worker

sudo service apache2 restart

1
这对我很有效,谢谢!不过我不确定为什么会有效,因为我没有对服务器环境进行任何更改,所以这个错误真的很随机。 - Shane N
1
有关这种情况的任何信息?对我来说已经修复了。 - Joel
2
FYI:仅运行“sudo a2dismod”将显示冲突的mpm_module名称。在我的情况下,它们是mpm_event和pmp_prefork。我禁用了mpm_event,因为我想让mpm_prefork运行。这个冲突是由安装一些php7.0相关的东西引起的。 - ajaaskel
很遗憾,a2dismod似乎只适用于Debian发行版。 - undefined

15

查看:/etc/httpd/conf.modules.d

您会发现一个名为:00-mpm.conf的文件

您只能取消注释这三行中的一行:

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
#LoadModule mpm_event_module modules/mod_mpm_event.so

更多信息请参见:https://httpd.apache.org/docs/2.4/mpm.html


老而真 :) - undefined

7
在Ubuntu中,解决方案与上述相同,但文件有所不同:
cd /etc/apache2/mods-enabled

root@ip:/etc/apache2/mods-enabled# ll mpm_*

lrwxrwxrwx 1 root root 32 Jun 30 10:33 mpm_event.conf -> ../mods-available/mpm_event.conf

lrwxrwxrwx 1 root root 32 Jun 30 10:33 mpm_event.load -> ../mods-available/mpm_event.load

lrwxrwxrwx 1 root root 34 Jun 30 11:36 mpm_prefork.conf -> ../mods-available/mpm_prefork.conf

lrwxrwxrwx 1 root root 34 Jun 30 11:36 mpm_prefork.load -> ../mods-available/mpm_prefork.load

root@ip:/etc/apache2/mods-enabled# cat mpm_event.load

# Conflicts: mpm_worker mpm_prefork mpm_itk

#LoadModule mpm_event_module /usr/lib/apache2/modules/mod_mpm_event.so



root@ip-10-0-0-249:/etc/apache2/mods-enabled# cat mpm_prefork.load
# Conflicts: mpm_event mpm_worker mpm_itk

LoadModule mpm_prefork_module /usr/lib/apache2/modules/mod_mpm_prefork.so

注释掉上述任何一个模块

root@ip:/etc/apache2/mods-enabled# service apache2 restart

这样做就可以了!! 它对我有效!

2
我正在使用mod-php7,发现我必须禁用mpm_event并保留mpm_prefork才能使其正常工作。 - Gordon Williams
我们应该注释什么? - Narendra Jaggi
对我来说,这个方法可行,不需要注释掉任何内容,只需删除mods-enabled中的符号链接。这样正确吗? - Antoni

3

在更新 Apache 后,如果在 Centos 7.0 下出现“More than one MPM loaded”错误,请尝试以下方法进行修复:

sudo vim /etc/httpd/conf.modules.d/00-mpm.conf

并注释此行

#Change from
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

#To
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

问题在于加载了多个多进程模块,导致Apache无法决定应该使用哪个模型,从而引发此错误。

昨晚在RedHat 7机器上遇到了这个问题。相同的修复方法也适用于那里,但我想知道为什么它会被加载两次。这个更改是通过yum更新进行的,但还没有机会进一步研究。自2018年10月以来一直工作正常。 - wsams

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接