我和许多人一样,拥有一个相对开箱即用的 Apache 安装,其中有很多默认的“LoadModule”行。
从一开始,我就安装了很多软件,说实话,我不知道哪些软件使用了哪些模块。
我想减少 Apache 实例的内存占用,为此,我想删除正在使用的模块。我知道的唯一确定模块是否正在使用的方法是从配置中删除它,然后查看是否有任何故障。这很糟糕,我没有时间描述。
我想知道是否有人知道如何让 Apache 报告哪些模块已被用过的或者是否有其他方式以编程方式确定模块是否安全取消配置。
答案1
我的做法是建立一个测试服务器,阅读文档,并从空白页开始。
以下模块是必修的:
- 核
- mod_authz_host
- mod_auth_basic
- mod_authn_文件
- mod_dir
- mod_log_config
- mod_mime
然后我注释掉所有剩余的模块并重新启动 Apache。如果出现问题,它会发出声音,例如:
Starting httpd: Syntax error on line 10 of /etc/httpd/conf.d/squid.conf:
Invalid command 'order', perhaps misspelled or defined by a module not included in the server configuration
对其他模块执行相同的操作。使用此方法,以下是一些经常使用的模块不是需要:
- mod_authn_alias
- mod_authn_anon
- 验证数据库模型
- mod_authn_default
- mod_authz_user
- mod_authz_owner
- mod_authz_group文件
- 修改权限
- mod_authz_default
- mod_include
- mod_logio
- mod_ext_filter
- mod_usertrack
- mod_dav
- mod_info
- 修改文件系统
- mod_speling
- mod_suexec
- mod_cgi
如果您不使用 LDAP 进行身份验证,则可以禁用此功能:
- mod_ldap
- 修改 LDAP 服务器
启用时应考虑以下模块:
- mod_proxy
- mod_proxy_balancer
- mod_proxy_ftp
- mod_proxy_http
- mod_proxy_connect
- mod_cache
- 修改磁盘缓存
- mod_file_cache
- 修改缓存
答案2
之前有一篇帖子建议禁用模块,直到出现问题。虽然这在生产系统中绝对是鲁莽的,但这个人走的是正确的路,因为无论如何你都需要进行回归测试。
因此在这种情况下:
- 构建一个与你正在运行的服务器相同的测试服务器,直至站点配置
- 禁用一个模块。
- 对网站进行回归测试。
- 重复步骤 2 和 3,直到出现故障或完成所有模块。
- 重新启用该模块。
- 重复步骤 2 和 3。
- 使用新更新的apache,对配置执行配置闪切并重新启动apache服务。
- 如果失败,请恢复配置池,提取日志,进行分析并从步骤 2 开始(或必要时从步骤 1 开始)。
这可能是简化 Apache 配置的最简单方法。否则,您将不得不查看每个模块,确定其功能并搜索网站以查看哪个模块使用了该功能。这会花费更长的时间。
答案3
我无法直接回答您的问题,但互联网上有许多“微型”AMP 软件包,据我所知,它们不包含大多数预安装的模块。因此,我首先将它们作为示例参考。
以下 2 个链接或许能帮助你入门:
答案4
测试某些东西是否会中断有其注意事项 - 通常某些指令仅在加载模块时使用(<IfModule>
),这意味着停用该模块可能不会直接中断某些东西,但会导致事情无法按预期工作。
对于某些模块,您可以检查其指令是否在配置中使用。虽然这很繁琐,但可能比仅仅测试某些东西是否损坏更万无一失。此外,您可以在进行更改之前进行检查。
例子:
- mod_version,提供
<IfVersion>
指令,在您的配置目录和 .htaccess 文件(如果使用)中搜索该指令
示例脚本:
#!/bin/bash
for i in "<IfVersion>" SuexecUserGroup Substitute;do
echo "Check for $i"
# look in configuration directories (this depends on your distribution)
grep -r -E "$i" /etc/apache2/conf-enabled/ /etc/apache2/mods-enabled/ /etc/apache2/sites-available
# look for .htaccess in webroot, this path depends on your setup
# not necessary if you do not use .htaccess
find /var/www/html -name .htaccess -exec grep "$i" {} \;
done
注:此脚本可以优化。