Apache模块加载优化核心在于按需启用、剔除冗余、理清依赖:MPM模块须优先加载,基础模块集中配置,功能模块分组管理,禁用未用模块(如mod_status),并通过IfDefine实现条件加载,避免dlopen开销与无效解析。

Linux 中优化 Apache 模块加载顺序以减少启动耗时,核心在于按需加载、剔除冗余、控制依赖关系,而非简单调整 .conf 文件里 LoadModule 的书写顺序。Apache 2.4+ 的模块加载机制本身不依赖配置文件中出现的先后顺序,而是由模块自身依赖和 MPM 初始化阶段决定;但合理组织能显著缩短解析时间、避免无效加载。
明确哪些模块真正需要
Apache 默认安装常包含几十个模块(如 mod_status、mod_info、mod_proxy_html 等),多数在普通静态或 PHP 站点中完全用不到。启动时仍会尝试加载并初始化,徒增开销。
建议做法:
- 运行
httpd -M(或apachectl -M)查看当前已启用模块列表 - 对比业务需求,逐个确认用途:
-
mod_rewrite→ URL 重写必需 -
mod_deflate→ 压缩传输必需 -
mod_ssl→ HTTPS 必需 -
mod_php7或mod_fcgid→ 动态脚本必需 -
mod_status、mod_info、mod_userdir、mod_ldap等 → 除非主动使用监控或特殊功能,否则禁用
-
- 在
/etc/httpd/conf.modules.d/目录下,将不需要的模块配置文件(如15-status.conf)临时重命名或移出该目录
把模块加载集中到独立配置文件中
Apache 通过 Include conf.modules.d/*.conf 加载模块,而 glob 排序(如 00-base.conf、10-php.conf)会影响加载逻辑顺序——尤其涉及 MPM 和线程安全模块的前置依赖。
推荐结构:
-
00-mpm.conf:仅含 MPM 模块(prefork/worker/event),且必须放在最前(因其他模块可能依赖它) -
01-core.conf:只放mod_mime、mod_dir、mod_alias等基础模块 -
10-php.conf或10-ssl.conf:按功能分组,避免混杂 - 删除空的或重复的
LoadModule行(例如某些发行版会同时在httpd.conf和conf.modules.d/中加载同一模块,导致重复警告甚至失败)
禁用动态模块加载(DSO)中的非必要项
若使用 apxs 编译过第三方模块(如 mod_limitipconn.so、mod_security2.so),务必确认其必要性:
- 每个 DSO 模块都会触发一次
dlopen()调用,增加启动延迟 - 若模块未被任何
<IfModule>或指令调用,仍会被加载(只要LoadModule存在) - 可改用条件加载:
<IfDefine SECURE_SERVER> LoadModule security2_module modules/mod_security2.so </IfDefine>启动时加
-D SECURE_SERVER参数才加载,日常可跳过
避免在主配置中 Include 过多碎片化文件
httpd.conf 中频繁使用 Include conf.d/*.conf 本身不慢,但若 conf.d/ 下有数十个空文件、注释文件或已失效的虚拟主机配置,Apache 仍需逐个 stat + open + parse。
实操建议:
- 清理
conf.d/,只保留生效的.conf(如php.conf、ssl.conf) - 将测试性或临时配置移到
/tmp或单独目录,不用Include - 用
apachectl -t -D DUMP_INCLUDES查看实际被包含的文件路径,验证是否精简到位
不复杂但容易忽略


















