LoadModule是Apache启用模块的唯一有效方式,必须在主配置作用域(如conf.modules.d/)中显式声明模块名、路径,经httpd -t验证、重载服务并用httpd -M确认加载成功。
直接在配置中写 loadmodule 指令,是 apache 启用模块的唯一有效方式。它不是“开关”,而是“加载声明”——模块文件存在、路径正确、abi 兼容,且该指令必须出现在主配置作用域中,才可能真正生效。
模块必须先加载,才能被使用
Apache 不会自动加载任何 DSO 模块。即使 mod_rewrite.so 已放在 /usr/lib64/httpd/modules/ 或 /usr/lib/apache2/modules/ 目录下,只要配置里没写 LoadModule rewrite_module modules/mod_rewrite.so,所有相关指令(如 RewriteEngine On)都会报错或静默忽略。
- 模块名必须与源码中定义的
AP_MODULE_DECLARE_DATA xxx_module完全一致(区分大小写,含下划线) - 路径是相对于
ServerRoot的相对路径,例如modules/mod_ssl.so表示$SERVER_ROOT/modules/mod_ssl.so - 不能写在
<VirtualHost>、<Directory>或<IfModule>块内部
优先使用 conf.modules.d/ 目录管理
主流发行版(RHEL/CentOS/Fedora/Debian)默认通过 Include conf.modules.d/*.conf 加载模块配置,不建议直接修改 httpd.conf 或 apache2.conf。
- 查看已有模块配置:
grep -r "mod_ssl.so" /etc/httpd/conf.modules.d/(RHEL系)或grep -r "mod_ssl.so" /etc/apache2/mods-available/(Debian系) - 若模块已存在但被注释(如
#LoadModule ssl_module modules/mod_ssl.so),取消注释即可 - 若模块来自第三方(如自编译的
mod_security2.so),新建文件如/etc/httpd/conf.modules.d/30-security.conf,写入完整LoadModule行
验证是否真正加载成功
改完配置 ≠ 生效,必须完成三步:语法检查 → 服务重载 → 模块确认。
- 检查语法:
httpd -t(RHEL)或apache2ctl configtest(Debian),返回Syntax OK才安全 - 列出已加载模块:
httpd -M | grep rewrite(看到rewrite_module (shared)表示成功) - 查错误日志:
tail -n 20 /var/log/httpd/error_log或/var/log/apache2/error.log,典型报错如Cannot load modules/mod_rewrite.so: undefined symbol: ap_log_rerror,说明模块与当前 Apache 版本 ABI 不兼容
注意权限和路径细节
模块文件本身也需满足基本要求,否则加载会失败。
- 模块权限应为
644或755,属主通常为root - 路径中不能有拼写错误、多余空格或大小写偏差(Linux 区分大小写)
- 确保 Apache 编译时启用了 DSO 支持(即包含
--enable-so),否则LoadModule指令无效


















