linux下为apache编译加载第三方模块需用apxs工具,前提是apache已启用dso支持(--enable-so),安装apache2-dev或httpd-devel头文件后,执行apxs -c编译、apxs -i -a -n安装并自动注册,最后重启服务生效。
linux 下为 apache http server 编译并加载自定义第三方模块,核心是使用 apxs 工具(apache extension tool),它专为动态编译、安装和注册模块设计,无需重新编译整个 apache。前提是 apache 必须已启用 dso(dynamic shared object)支持,即编译时带 --enable-so 选项。
确认 Apache 支持动态模块
运行以下命令检查是否已启用 mod_so(DSO 基础模块):
httpd -M | grep so 或 apache2ctl -M | grep so
若输出含 so_module (shared),说明支持;否则需重装 Apache 并确保配置中包含 --enable-so。
准备第三方模块源码
获取模块的 C 源文件(如 mod_foo.c),通常来自模块作者提供的代码包或 GitHub 仓库。确保该模块兼容当前 Apache 版本(2.4.x 系列模块不兼容 2.2.x 的 API)。
常见要求包括:
- 模块源码中需包含
AP_MODULE_DECLARE_DATA宏定义的模块结构体(如foo_module) - 开发头文件已安装:
sudo apt install apache2-dev(Debian/Ubuntu)或sudo yum install httpd-devel(RHEL/CentOS) - 确认
apxs可用:which apxs,路径通常为/usr/bin/apxs或/usr/local/apache2/bin/apxs
用 apxs 编译并安装模块
进入模块源码所在目录(例如含 mod_foo.c 的目录),执行两步:
/usr/bin/apxs -c mod_foo.c/usr/bin/apxs -i -a -n foo mod_foo.la
说明:
-
-c:编译并链接生成.la和.so文件 -
-i:将.so复制到 Apache 的modules/目录(如/usr/lib/apache2/modules/) -
-a:自动在主配置文件末尾添加LoadModule foo_module modules/mod_foo.so -
-n foo:指定模块名(影响LoadModule中的标识符和配置指令前缀)
若 apxs 报错找不到头文件或函数,可显式指定路径,例如:
apxs -I /usr/include/apache2 -c mod_foo.c
启用模块并验证
检查主配置文件(如 /etc/apache2/apache2.conf 或 /etc/httpd/conf/httpd.conf)是否已自动写入 LoadModule 行。没有则手动添加:
LoadModule foo_module modules/mod_foo.so
接着检查模块是否被识别:
httpd -t(语法检查)httpd -M | grep foo(确认已加载)
无误后重启服务:
sudo systemctl restart apache2(Debian/Ubuntu)sudo systemctl restart httpd(RHEL/CentOS)
模块即开始生效,可按其文档配置对应指令(如 Foobar On)。











