如何向已经安装好的apache添加一个模块

如何向已经安装好的apache添加一个模块,第1张

apxs - Apache 扩展工具

apxs是一个为Apache HTTP服务器编译安装扩展模块的工具,用于编译一个或多个源程序或目标代码文件为动态共享对象,使之可以用由mod_so提供的LoadModule指令在运行时加载到Apache服务器中。

因此,要使用这个扩展机制,你的平台必须支持DSO特性,而且Apache httpd必须内建了mod_so模块。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

$ _

其中的参数files可以是任何C源程序文件(.c)、目标代码文件(.o)、甚至是一个库(.a)。apxs工具会根据其后缀自动编译C源程序或者连接目标代码和库。但是,使用预编译的目标代码时,必须保证它们是地址独立代码(PIC),使之能被动态地加载。如果使用GCC编译,则应该使用 -fpic 参数;如果使用其他C编译器,则应该查阅其手册,为apxs使用相应的编译参数。

有关Apache对DSO的支持的详细信息,可以阅读mod_so文档,或者直接阅读src/modules/standard/mod_so.c源程序。

Apache已经安装完毕并投入运行,但是后来却发现部分模块没有加载,当然有两个方法:

1. 一是完全重新编译Apache, 再安装

2. 编译模块为SO文件,使用LoadModule指令加载扩展模块。

apache安装后追加mod_rewrite

1.apache1.3

apache_1.3.34.tar.gz 解压后的目录为 /root/apache_1.3.34 文中简称为“源码目录”

apache安装目录 /usr/local/apache 文中简称为“目标目录”

步骤:

1、Apache安装rewrite模块的时候需要DBM支持,否则无法编译,所以首先要安装一个GDBM

下载地址:ftp://ftp.gnu.org/gnu/gdbm/

安装步骤:

进入安装目录,

./configure

make

make install

make install-compat (最后行也要执行。否则无法编译出ndbm.h头文件)

如果您不能确定服务器上是否已经装有DBM,那么可以安装一下。否则这步可以跳过。

2、现在到apache源码目录的标准模块目录中(/root/apache_src/src/modules/standard/)中,使用如下指令编译出so文件:

/usr/local/apache/bin/apxs -c mod_rewrite.c -lgdbm

即可得到mod_rewrite.so文件。

备注:"-lgdbm"是用为说明在编译mod_rewrite.c时要把gdbm链接进来。这样在第6步启动apache时就不会报出"dbm fetch"的错误了。

3、现在让apache的apxs来自动向http.conf配置文件中加入LoadModule语句并将mod_rewrite.so文件拷贝到apache/libexec目录

/usr/local/apache/bin/apxs -i -A -n rewrite /root/apache_1.3.34/src/modules/standard/mod_rewrite.so  备注:命令中的rewrite参数是告诉apxs命令mod_rewrite.so文件中的模块名。在命令执行后,apxs会在LoadModule中为rewrite加上"_module"以标名模块名称。

如果你在启动apache时发现总是给出“不能定位API”之类的错误,那就是说明LoadModule后面的模块名的语法要根据您的apache版本加以改变。

4、停止apache

apache/bin/apachectl stop

5、运行配置文件检查命令

apache/bin/apachectl configtest

如显示Syntax OK,则表示整个 *** 作成功。那么可以到第6步。否则根据提示信息进行调试。但只要按照此文所说进行 *** 作是不会出错的。

6、启动apache。

apache/bin/apachectl start


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11563074.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存