为a2enmod找出正确的Apache模块名称

我有一个现有的httpd.conf文件,我应该去运行Ubuntu的Vagrant实例,我正在使用Puppet来提供。

我遇到的问题是模块名称。 httpd.conf指定了一堆模块,如下所示:

LoadModule access_compat_module modules/mod_access_compat.so LoadModule actions_module modules/mod_actions.so LoadModule alias_module modules/mod_alias.so LoadModule allowmethods_module modules/mod_allowmethods.so LoadModule asis_module modules/mod_asis.so LoadModule auth_basic_module modules/mod_auth_basic.so 

为了设置所有这些模块,我需要告诉我正在使用的Puppet Apache模块(通过Example42 )我想要安装和启用的模块名称。 问题是模块名称与httpd.conf行不是 1:1匹配。 换句话说,模块名称不能总是从文件中推断出来。

例如,这里是我,试图启用文件的第一行( mod_access_compat.so ):

 vagrant@lucid64:~$ sudo a2enmod access_compat ERROR: Module access_compat does not exist! vagrant@lucid64:~$ sudo a2enmod access_compat_module ERROR: Module access_compat_module does not exist! vagrant@lucid64:~$ sudo a2enmod accesscompat ERROR: Module accesscompat does not exist! 

tl; dr:我怎样才能知道正确的模块名称为a2enmod而不要猜测?

如果你正在search的模块是一个variables,你可以在/etc/apache2/mods-available/

使用find命令来search一个文件,这个文件包含你知道mod的那部分string,

例如find /etc/apache2/mods-available/ -name *\lite\*

输出/etc/apache2/mods-available/charset_lite.load

把你想要的string放在*\...\* ,就像之前或之后的那样

  • a2enmod [enter] – >查看所有可用的模块
  • apache2ctl -M – >查看加载的模块(可以是RedHat上的apachectl

消除mod_和.so并加载结果:

 $ MODUL=mod_auth_basic.so $ sudo a2enmod $(<<< $MODUL sed 's#mod_\(.*\)\.so#\1#') Module auth_basic already enabled