apache源码编译时模块启停由configure参数决定:启用用--enable-xxx(加=shared为动态,不加为静态),禁用用--disable-xxx;--enable-so是动态模块前提;第三方模块可用--with-module;验证需用httpd -m、ls modules/和httpd -t。

Apache 源码编译安装时,模块的启用或禁用完全由 ./configure 脚本的参数控制。不是装完再开关,而是在编译前就决定哪些模块以静态(built-in)或动态(shared)方式集成进去。
启用模块:用 --enable-XXX 语法
绝大多数常用模块通过 --enable-XXX 开启,其中 XXX 是模块名去掉 mod_ 前缀后的名称。是否加 =shared 决定加载方式:
-
--enable-rewrite:模块编译进 httpd 主程序(static),启动即生效,httpd -M显示为rewrite_module (static) -
--enable-rewrite=shared:模块编译为mod_rewrite.so,需在httpd.conf中显式写LoadModule rewrite_module modules/mod_rewrite.so -
--enable-so必须开启——它是所有动态模块(=shared)的前提,没有它,LoadModule指令会报错 - 常见可启用模块示例:
--enable-ssl、--enable-cgi、--enable-deflate、--enable-expires、--enable-headers
禁用模块:用 --disable-XXX 或跳过启用
默认情况下,Apache 只启用少量核心模块(如 core、http_core)。其他模块不指定 --enable 就不会被编译进去。若想明确关闭某模块(尤其在继承默认行为时):
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
--disable-status:确保mod_status不被编译(即使某些版本默认启用) -
--disable-info、--disable-asis等同理 - 注意:
--disable-XXX对未默认启用的模块无效,只对可能被自动包含的模块起作用(如部分 MPM 或调试模块)
手动添加未内置模块:--with-module
对于不在 Apache 官方模块列表中的第三方模块,或想把某个源文件单独编译进主程序,可用:
-
--with-module=generators:modules/generators/mod_cgi.c:把mod_cgi.c编译为静态模块 - 路径必须是相对于源码根目录的相对路径,且模块类型(如
generators)需匹配其所属目录分类 - 该方式不生成 .so 文件,也不需要
LoadModule,但灵活性低,一般只用于特殊定制场景
验证是否生效:编译后检查
执行完 ./configure && make && make install 后,不要凭感觉判断。直接验证:
- 查看已加载模块:
/usr/local/apache2/bin/httpd -M(路径按你的--prefix调整) - 确认模块文件存在:
ls /usr/local/apache2/modules/mod_rewrite.so(仅对=shared有效) - 检查配置是否冲突:如果模块是 static,
httpd.conf中再写LoadModule xxx_module会报错“module is built-in and can't be loaded” - 运行
/usr/local/apache2/bin/httpd -t测试配置语法,避免因模块缺失导致启动失败










