LoadModule 是 Apache 加载 DSO 模块的唯一声明指令,必须置于主配置作用域(如 httpd.conf 或 conf.modules.d/),路径相对于 ServerRoot,且需经 httpd -t 验证、重载服务并用 httpd -M 确认加载成功。
loadmodule 是 apache 启用模块的唯一入口指令,但它不是“启用开关”,而是“加载声明”——必须写在主配置作用域,且模块文件得真实存在、路径准确、abi 兼容。
模块必须先加载,才能被使用
Apache 不会自动加载任何 DSO 模块。即使模块文件(如 mod_rewrite.so)已放在 modules/ 目录下,若未在配置中用 LoadModule 显式声明,所有相关指令(如 RewriteEngine On)都会报错或被忽略。
- 指令格式固定:
LoadModule 模块名_module modules/模块文件.so - 模块名必须与源码中定义的
AP_MODULE_DECLARE_DATA xxx_module完全一致(区分大小写,含下划线) - 路径是相对于
ServerRoot的相对路径,例如modules/mod_rewrite.so表示$SERVER_ROOT/modules/mod_rewrite.so - 不能写在
<VirtualHost>、<Directory>或<IfModule>块内部
加载位置:优先用 conf.modules.d/ 目录
现代 Apache(RHEL/CentOS/Fedora/Debian 等主流发行版)默认通过 Include conf.modules.d/*.conf 加载模块配置,不建议直接改 httpd.conf。
- 查看已有模块配置:
grep -r "mod_ssl.so" /etc/httpd/conf.modules.d/ - 若模块已存在但被注释,取消注释即可(如
#LoadModule ssl_module modules/mod_ssl.so→LoadModule ssl_module modules/mod_ssl.so) - 若模块不在默认包中(如自编译的
mod_security2.so),新建文件如/etc/httpd/conf.modules.d/30-security.conf,写入完整LoadModule行
验证是否真正加载成功
改完配置不等于生效,必须语法检查 + 服务重载 + 模块确认三步到位:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 检查语法:
httpd -t(返回Syntax OK才安全) - 列出已加载模块:
httpd -M | grep rewrite(看到rewrite_module (shared)表示成功) - 查错误日志:
tail -n 20 /var/log/httpd/error_log,典型报错如Cannot load modules/mod_rewrite.so: undefined symbol: ap_log_rerror,说明模块与当前 Apache 版本 ABI 不兼容 - 注意:模块权限需为
644或755,属主通常为root;路径中不能有拼写错误或多余空格
常见核心模块加载示例
以下模块随官方包提供,通常只需取消注释或补全 LoadModule 行:
- URL 重写:
LoadModule rewrite_module modules/mod_rewrite.so - 响应头控制:
LoadModule headers_module modules/mod_headers.so - Gzip 压缩:
LoadModule deflate_module modules/mod_deflate.so - 代理转发:
LoadModule proxy_module modules/mod_proxy.so+LoadModule proxy_http_module modules/mod_proxy_http.so - HTTPS 支持:
LoadModule ssl_module modules/mod_ssl.so
这些模块加载后,才可在 <VirtualHost> 或站点配置中使用对应功能,比如 RewriteRule、Header set、SSLEngine on 等。

















