找出是否可以禁止网站使用Apache模块

我可以使用下面的命令看到apache加载的核心和其他模块的列表:

$ apache2ctl -t -D DUMP_MODULES Loaded Modules: core_module (static) mpm_prefork_module (static) http_module (static) so_module (static) auth_basic_module (shared) auth_digest_module (shared) 

为了优化服务器的性能(本质上节省每个Apache线程的内存),我想禁用未使用的模块。 Apache文档在下一页提供了有关这些模块的信息。

大多数情况下,为每个模块提供的信息足以确定是否应禁用模块。 例如,我知道我不使用LDAP身份validation,所以我可以安全地禁用authnz_ldap_module

然而,对于一些模块来说,这是不太明显的。 例如,对于mod_mime无法parsing的情况, mime_magic模块被用作“第二道防线”,这在理论上不能确定,因为它取决于Apache将提供哪些文件。

问:是否有办法将Apache有效用于处理请求的模块列表logging到文件中?

如果我可以logging这些信息,那么我只需让Web服务器运行一段时间,然后获取用于处理同时收到的所有请求的模块列表,并禁用那些不在列表中出现的请求。

我不认为有一个通用的解决scheme,但仍然有一些select。 有些模块(例如mod_rewrite )有自己的日志工具,但是你必须阅读每个模块的文档才能find。 任何列为static模块都将被编译进去,除非您重新编译Apache,否则无法禁用。 其余的,你可以尝试三件事情:search指令前缀,启用debugging日志logging,或select性地禁用逐个模块并重新启动。

对于大多数模块,指令共享一个通用的前缀。 对于HTTPauthentication模块, basicdigest ,可以通过使用grep过滤configuration文件来判断是否正在使用它们。 如果你正在做虚拟主机,你可以做下面的事情:

 cd /etc/apache2/sites-enabled grep Auth * 

如果您看到任何类似于AuthType basicAuthType digest ,则需要这些模块中的一个或两个。 否则,禁用它们应该是安全的。 对于其他模块也是如此:只有在MimeMagicFile指令是在某个地方发出的时候, MimeMagicFile mime_magic被启用。

如果之后还有模块,您可能会尝试启用LogLevel debug并检查日志。 如果你看到一个模块的输出,那么你可以告诉模块正在使用。 您甚至可以为特定模块设置LogLeveldebugging 。 这与你所问的有点不同,因为如果你没有看到任何输出,这并不一定意味着一个模块没有被使用。 (也许它根本不会产生debugging输出。)

最后,在很多情况下,你可以尝试禁用一个模块并运行apache2ctl configtest 。 如果由于模块未被加载而导致无法识别指令,则会导致错误。