我有一个现有的 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 模块我正在使用(通过例42)我想安装和启用哪些模块名称。问题是模块名称不是与 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!
总结:a2enmod
我怎样才能在不猜测的情况下知道正确的模块名称?
答案1
如果您要搜索的模块是一个变量,您可以在其中搜索其名称/etc/apache2/mods-available/
使用find
命令搜索包含你知道的有关该模块的字符串部分的文件,
例如 find /etc/apache2/mods-available/ -name *\lite\*
输出 /etc/apache2/mods-available/charset_lite.load
将您想要的字符串放在*\...\*
这个单词之前或之后
答案2
a2enmod
[输入] -> 查看所有可用模块apache2ctl -M
-> 查看已加载的模块(可以apachectl
在 RedHat 上)
答案3
消除 mod_ 和 .so 并加载结果:
$ MODUL=mod_auth_basic.so
$ sudo a2enmod $(<<< $MODUL sed 's#mod_\(.*\)\.so#\1#')
Module auth_basic already enabled