了解是否可以从网站使用中禁用 Apache 模块

Max*_*Max 5 ubuntu logging apache-2.2

我可以使用以下命令查看 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)
Run Code Online (Sandbox Code Playgroud)

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

大多数时候,为每个模块提供的信息足以确定我是否应该禁用模块。例如,我知道我不使用LDAP身份验证,因此我可以安全地禁用authnz_ldap_module.

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

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

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

小智 4

我不相信有一个通用的解决方案,但仍然有一些选择。某些模块(例如,mod_rewrite)有自己的日志记录工具,但您必须阅读每个模块的文档才能找到答案。列出的任何模块static都已编译,并且无法禁用,除非您重新编译 Apache。对于其余的,您可以尝试三件事:搜索指令前缀、启用调试日志记录或有选择地逐个模块禁用并重新启动。

对于大多数模块,指令共享一个公共前缀。对于 HTTP 身份验证模块basicdigest,您可以通过使用 过滤配置文件来判断您是否正在使用它们grep。如果您正在进行虚拟主机,您可能可以执行以下操作:

cd /etc/apache2/sites-enabled
grep Auth *
Run Code Online (Sandbox Code Playgroud)

如果您看到类似AuthType basic或 的内容AuthType digest,则您需要其中一个或两个模块。否则,禁用它们应该是安全的。对于其他模块也类似:mime_magic仅当MimeMagicFile指令在某处发出时才启用。

如果之后您仍然不确定某些模块,您可以尝试启用LogLevel debug并检查日志。如果您看到模块的一些输出,则可以判断该模块正在使用。您甚至可以为特定模块设置 LogLevel 调试。这与您询问的内容略有不同,因为如果您没有看到任何输出,并不一定意味着模块未在使用中。(也许它根本不产生调试输出。)

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

  • 到目前为止,我一直在检查与模块相关的指令,看看是否可以禁用模块。比重新启动 apache 并发现它不会再次启动更好,因为正在使用的模块已被禁用:使用 `apache2ctl configtest` (2认同)