我可以使用以下命令查看 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
身份验证,因此我可以安全地禁用authnz_ldap_module
。
然而对于某些模块来说,这一点不太明显。例如mime_magic
模块被用作以下情况的“第二道防线”mod_mime
无法解决,理论上无法确定,因为这取决于 Apache 将提供哪些文件。
Apache
问:有没有办法将有效处理请求的模块列表记录到文件中?
如果我可以记录这样的信息,我会让 Web 服务器运行一段时间,然后获取用于处理在此期间收到的所有请求的模块列表,并禁用那些未出现在该列表中的模块。
答案1
我不相信存在通用的解决方案,但仍有一些选择。一些模块(例如mod_rewrite
)有自己的日志记录功能,但您必须阅读每个模块的文档才能找到。任何列为的模块static
都是编译在 Apache 中的,除非您重新编译 Apache,否则无法禁用。对于其余的,您可以尝试三件事:搜索指令前缀、启用调试日志记录或有选择地逐个模块禁用并重新启动。
对于大多数模块,指令共享一个通用前缀。对于 HTTP 身份验证模块basic
和digest
,您可以通过使用过滤配置文件来判断是否正在使用它们grep
。如果您正在使用虚拟主机,您可能可以执行以下操作:
cd /etc/apache2/sites-enabled
grep Auth *
如果您看到类似AuthType basic
或 的内容AuthType digest
,则说明您需要其中一个或两个模块。否则,禁用它们应该是安全的。其他模块也类似:仅在某处发出指令mime_magic
时才启用。MimeMagicFile
如果在此之后你仍然不确定某些模块,你可以尝试启用LogLevel debug
并检查日志。如果你看到模块的一些输出,那么你就可以知道该模块正在使用中。你甚至可以为特定模块设置 LogLevel debug。但这与您询问的内容略有不同,因为如果您没有看到任何输出,则并不一定意味着模块未被使用。(也许它只是没有产生调试输出。)
最后,在很多情况下,你可以尝试禁用模块并运行
apache2ctl configtest
。如果由于模块未加载而无法识别指令,则会导致错误。