<-
Apache HTTP 服务器 2.4 > 手册页:apxs

apxs-APache eXtenSion工具

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

因此,要使用此扩展机制,您的平台必须支持DSO功能,并且httpd必须使用该mod_so模块构建Apache 二进制文件 。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工具会自动识别这些扩展名,并自动将C源文件用于编译,而仅将对象文件和归档文件用于链接阶段。但是,使用此类预编译对象时,请确保将其编译为位置无关代码(PIC),以便能够将其用于动态加载的共享对象。例如,对于GCC,您始终只需要使用即可-fpic。对于其他C编译器,请查阅其手册页或关注标志apxs用于编译目标文件的信息。

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

支持Apache!

也可以看看

最佳

概要

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 ...

最佳

选件

常用选项

-n modname
这将显式设置-i(安装)和-g(模板生成)选项的模块名称。使用它来显式指定模块名称。对于选项,-g这是必需的,对于选项,-iapxs工具尝试至少从文件名中猜测源名称来确定名称(或作为备用)。

查询选项

-q
对用于build的变量和环境设置执行查询httpd。在没有查询参数的情况下调用时,它将打印所有已知变量及其值。可选-v 参数格式化列表输出。

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

INC=-I`apxs -q INCLUDEDIR`

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

配置选项

-S name=value
此选项更改上述apxs设置。

模板生成选项

-g
这将生成一个子目录名称(请参阅选项 -n),并有两个文件:一个名为的示例模块源文件 ,可以用作创建自己的模块的模板或用作使用apxs机制的快速入门。以及一个相应的模块,用于更轻松地构建和安装该模块。mod_name.cMakefile

DSO编译选项

-c
这表示编译操作。它首先编译的C源文件(.c)中文件为相应的对象文件(.o),然后生成在动态共享对象dsofile通过链接这些对象文件加的剩余对象文件(.o和.a)中 的文件。如果未-o指定选项,则从文件中的第一个文件名猜测输出文件,因此通常默认为。mod_name.so
-o dsofile
明确指定创建的动态共享对象的文件名。如果未指定,并且无法从文件列表中猜出 该名称,mod_unknown.so则使用后备名称。
-D name=value
此选项直接传递给编译命令。使用它可以在构建过程中添加自己的定义。
-I incdir
此选项直接传递给编译命令。使用它来添加您自己的包含目录以搜索到构建过程。
-L libdir
此选项直接传递给链接器命令。使用它来添加您自己的库目录以搜索到构建过程。
-l libname
此选项直接传递给链接器命令。使用它来添加您自己的库以搜索到构建过程。
-Wc,compiler-flags
此选项将编译器标志作为附加标志传递给libtool --mode=compile命令。使用此选项可添加特定于本地编译器的选项。
-Wl,linker-flags
此选项将链接器标志作为附加标志传递给libtool --mode=link命令。使用它来添加特定于本地链接器的选项。
-p
此选项使apxs链接到apr / apr-util库。在编译使用apr / apr-util库的帮助程序时,这很有用。

DSO安装和配置选项

-i
这指示安装操作,并将一个或多个动态共享的对象安装到服务器的modules 目录中。
-a
通过自动将相应的LoadModule行添加到Apache的httpd.conf配置文件或激活该模块(如果已经存在)来 激活该模块 。
-A
与option相同,-a但所创建的LoadModule指令的前缀为井号(#),,该模块仅准备用于以后的激活,但最初被禁用。
-e
这表示编辑操作,可以与-a-A选项一起使用, 类似于在 不尝试安装模块的情况下-i编辑Apache的httpd.conf配置文件的 操作。
最佳

例子

假设您有一个名为mod_foo.cavailable 的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
$ _

可用语言: zh  |  fr  |  ko  |  TR 

最佳

注释

注意:
这不是“问答”部分。此处放置的评论应指向有关改进文档或服务器的建议,如果实施或被认为无效/偏离主题,我们的主持人可以将其删除。有关如何管理Apache HTTP Server的问题,应直接指向我们的IRC频道#httpd(位于Freenode上),或发送至我们的邮件列表
目前,此页面已禁用评论。