apxs-APache eXtenSion 工具

apxs是用于为 Apache 超文本传输协议(HTTP)服务器构建和安装扩展模块的工具。这是通过从一个或多个源文件或目标文件构建动态共享库(DSO)来实现的,然后可以在运行时通过mod_soLoadModule指令将其加载到 Apache 服务器中。

因此,要使用此扩展机制,您的平台必须支持 DSO 功能,并且必须使用mod_so模块构建您的 Apache httpd二进制文件。如果不是这种情况,apxs工具会自动进行投诉。您可以通过手动运行命令自己检查

$ httpd -l

mod_so模块应该是显示列表的一部分。如果满足了这些要求,则可以借助此apxs工具通过使用 DSO 机制安装自己的模块来轻松扩展 Apache 服务器的功能:

$ apxs -i -a -c mod_foo.c gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c ld -Bshareable -o mod_foo.so mod_foo.o cp mod_foo.so /path/to/apache/modules/mod_foo.so chmod 755 /path/to/apache/modules/mod_foo.so [activating module `foo' in /path/to/apache/etc/httpd.conf] $ apachectl restart /path/to/apache/sbin/apachectl restart: httpd not running, trying to start [Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_module /path/to/apache/sbin/apachectl restart: httpd started $ _

参数文件可以是任何 C 源文件(.c),目标文件(.o)或库归档文件(.a)。 apxs工具会自动识别这些 extensions,并自动将 C 源文件用于编译,而仅将对象文件和归档文件用于链接阶段。但是,当使用此类预编译对象时,请确保将其编译为位置无关代码(PIC),以便能够将其用于动态加载的共享对象。例如,对于 GCC,您始终只需要使用-fpic即可。对于其他 C 编译器,请查阅其手册页或注意apxs用于编译目标文件的标志。

有关 Apache 中 DSO 支持的更多详细信息,请阅读mod_so的文档,或者甚至阅读src/modules/standard/mod_so.c源文件。

Synopsis

apxs -g [ -S name=value ] -n modname

apxs -q [ -v ] [ -S name=value ] query ...

apxs -c [ -S name=value ] [ -o dsofile ] [ -I incdir ] [ -D name=value ] [ -L libdir ] [ -l libname ] [ -Wc,compiler-flags ] [ -Wl,linker-flags ] files ...

apxs -i [ -S name=value ] [ -n modname ] [ -a ] [ -A ] dso-file ...

apxs -e [ -S name=value ] [ -n modname ] [ -a ] [ -A ] dso-file ...

Options

Common Options

Query Options

使用它来手动确定用于构建将加载模块的httpd的设置。例如使用

INC = -I''

如果您需要手动访问 Apache 的 C 头文件,请在自己的 Makefile 中使用。

Configuration Options

模板生成选项

DSO 编译选项

DSO 安装和配置选项

Examples

假设您有一个名为mod_foo.c的 Apache 模块,该模块应该扩展 Apache 的服务器功能。为此,您首先必须通过以下命令将 C 源代码编译为适合在运行时加载到 Apache 服务器的共享库中:

$ apxs -c mod_foo.c /path/to/libtool --mode=compile gcc ... -c mod_foo.c /path/to/libtool --mode=link gcc ... -o mod_foo.la mod_foo.slo $ _

然后,您必须通过确保存在LoadModule指令来加载此共享库来更新 Apache 配置。为了简化此步骤,apxs提供了一种自动方法来将共享对象安装在其“模块”目录中并相应地更新httpd.conf文件。这可以通过运行:

$ apxs -i -a mod_foo.la /path/to/instdso.sh mod_foo.la /path/to/apache/modules /path/to/libtool --mode=install cp mod_foo.la /path/to/apache/modules ... chmod 755 /path/to/apache/modules/mod_foo.so [activating module `foo' in /path/to/apache/conf/httpd.conf] $ _

这样一条线叫

LoadModule foo_module modules/mod_foo.so

如果仍然不存在,则会将其添加到配置文件。如果您想默认禁用此功能,请使用-A选项,即*

$ apxs -i -A mod_foo.c

为了快速测试 apxs 机制,您可以通过以下方法创建示例 Apache 模块模板以及相应的 Makefile:

$ apxs -g -n foo Creating [DIR] foo Creating [FILE] foo/Makefile Creating [FILE] foo/modules.mk Creating [FILE] foo/mod_foo.c Creating [FILE] foo/.deps $ _

然后,您可以立即将此示例模块编译为共享对象,并将其加载到 Apache 服务器中:

$ cd foo $ make all reload apxs -c mod_foo.c /path/to/libtool --mode=compile gcc ... -c mod_foo.c /path/to/libtool --mode=link gcc ... -o mod_foo.la mod_foo.slo apxs -i -a -n "foo" mod_foo.la /path/to/instdso.sh mod_foo.la /path/to/apache/modules /path/to/libtool --mode=install cp mod_foo.la /path/to/apache/modules ... chmod 755 /path/to/apache/modules/mod_foo.so [activating module `foo' in /path/to/apache/conf/httpd.conf] apachectl restart /path/to/apache/sbin/apachectl restart: httpd not running, trying to start [Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_module /path/to/apache/sbin/apachectl restart: httpd started $ _

首页