Apache源码安装精简模块的核心是编译阶段主动裁剪,通过--disable-MODULE参数禁用非必需模块(如cgi、status、ldap等),保留mime、dir、so等关键模块,可降低内存占用、缩短启动时间、缩小攻击面。

Apache 源码安装时精简默认模块,核心是“编译阶段主动裁剪”,而非安装后再禁用。这样能从源头减少内存占用、缩短启动时间、降低攻击面,比运行时卸载模块更彻底有效。
编译前明确哪些模块可安全禁用
Apache 默认启用 Base 组模块(如 mod_access_compat、mod_auth_basic、mod_log_config 等),但并非全部必需。以下模块在多数静态网站或反向代理场景中可禁用:
-
mod_cgi和mod_cgid:无 Perl/Python 脚本执行需求时禁用 -
mod_status和mod_info:不对外提供服务器状态页时禁用 -
mod_ldap、mod_authnz_ldap:未对接 LDAP 认证时禁用 -
mod_proxy_ftp、mod_cache_disk:不用 FTP 代理或磁盘缓存时禁用 -
mod_dav、mod_dav_fs:不提供 WebDAV 服务时禁用
configure 阶段使用 --disable-MODULE 参数
进入解压后的源码目录,执行 ./configure 时显式关闭不需要的模块。例如:
./configure \ --prefix=/usr/local/apache2 \ --enable-so \ --with-mpm=event \ --disable-cgi \ --disable-cgid \ --disable-status \ --disable-info \ --disable-ldap \ --disable-authnz-ldap \ --disable-dav \ --disable-dav-fs \ --enable-rewrite \ --enable-deflate \ --enable-expires \ --enable-headers
注意:--disable-MODULE 中 MODULE 名称与 LoadModule 指令中的模块标识一致(如 mod_status.c 对应 --disable-status),大小写和下划线需严格匹配。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
避免误删关键基础模块
以下模块属于 Apache 运行底层依赖,不可禁用:
-
mod_mime:决定文件类型响应头,禁用会导致所有资源返回text/plain -
mod_dir:处理目录索引和默认首页(如 index.html),禁用后访问目录会报 403 -
mod_unixd(Unix 系统)或mod_win32(Windows):负责用户权限隔离,禁用将导致启动失败 -
mod_so:若需后续动态加载模块(如 mod_ssl),必须启用(通过--enable-so)
不确定某模块是否关键?可先保留,编译后用 httpd -M | grep module_name 查看是否已加载,再结合实际业务验证影响。
验证精简效果与安全性
安装完成后,运行以下命令确认裁剪生效:
-
httpd -M:列出所有已启用模块,检查目标模块是否不在列表中 -
httpd -t:语法检查,确保配置无冲突 -
ps aux | grep httpd | wc -l:对比精简前后 worker 进程内存占用变化(通常下降 10–25 MB/进程) - 用
nmap -sV localhost -p 80扫描响应头,确认未暴露Server: Apache/2.x.x (Unix)外的冗余信息
精简不是越少越好,而是按需保留。一个典型轻量部署可仅保留:so、rewrite、deflate、expires、headers、mime、dir、log_config、access_compat(兼容旧规则)、authz_core —— 共约 10 个核心模块,其余按业务动态增补。

















