apache apx 添加模块[基本语法]

Apache安装完成后,添加mod_proxy模块
作者:wind | 可以转载, 转载时务必以超链接形式标明文章原始出处和作者信息及版权声明
网址:http://60.190.88.90/ljf/2008/05/apachemod-proxy.html
apxs是一个为Apache HTTP服务器编译和安装扩展模块的工具,用于编译一个或多个源程序或目标代码文件为动态共享对象,使之可以用LoadModule指令在运行时加载到Apache服务器中。

1. 进入apache源代码的modules目录

2. 运行如下命令自动编译、安装和修改httpd.conf文件,激活mod_proxy模块:

apache path/bin/apxs -c -i -a mod_proxy.c proxy_util.c

选项说明:
-c 执行编译操作
-i 安装操作,安装一个或多个动态共享对象到服务器的modules目录
-a 自动增加一个LoadModule行到httpd.conf文件,以激活此模块,若此行存在则启用之
-A 与-a类似,但是它增加的LoadModule行前有井号前缀(#)
-e 需要执行编辑操作,可与-a和-A选项配合使用,与-i操作类似,修改httpd.conf文件,但并不安装此模块

3. 重启apache。

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

以前一直有这样的需求,是说apache缺少我需要的模块,可是如何在不影响现有程序的基础上,直接添加一个loadModule呢,但是模块文件从哪里来?从另外一个系统复制一份过来是否可行?虽然只是一个 foo.so 文件,放到module文件夹就可以了,但我还是查了一下资料,找到合适的方法,并且尝试过了。

这个是原文

引用
apache 添加 mod_rewrite 模块

我使用的是httpd 2.0.55 注意配置httpd.conf 时 是 rewrite_module 而不是 mod_rewrite

1、Apache安装rewrite模块的时候需要DBM支持,否则无法编译。使用rpm -qa gdbm 查询,如果没有,需要先下载并安装gdbm:
下载地址:ftp://ftp.gnu.org/gnu/gdbm/

安装步骤:
./configure
make
make install
make install-compat (如果不执行此步,无法编译出ndbm.h头文件)

2、安装
#cd /root/src/httpd-2.0.55/modules/mappers
#/usr/local/apache/bin/apxs -c mod_rewrite.c
#gcc -shared -o mod_rewrite.so mod_rewrite.o -lgdbm
#/usr/local/apache/bin/apxs -i -A -n mod_rewrite mod_rewrite.so

/usr/local/apache/bin/ 是我正在使用的apahce的目录

3、配置httpd.conf
加入 LoadModule rewrite_module modules/mod_rewrite.so

注意是 rewrite_module 而不是 mod_rewrite

过程其实很容易理解:
1 在httpd的源文件里面找到 foo.c
2 运行程序编译出 foo.so
3 在httpd.conf添加进来

这里面要注意的两点:
1 foo.c是按功能放置在modules目录的,自己找到相应目录
2 loadModule命令默认是注释的,要去掉后还要改一下名称

下面是尝试expires功能的添加:

cd modules/metadata/
(expires属于metadata功能部分的)
/Data/apps/apache/bin/apxs -c mod_expires.c
gcc -shared -o mod_expires.so mod_expires.o -lgdbm
/Data/apps/apache/bin/apxs -i -A -n mod_expires mod_expires.so

编辑httpd.conf文件
LoadModule expires_module modules/mod_expires.so

然后测试一下:

引用
[root@localhost apache]# ./bin/apachectl -t
Syntax OK
[root@localhost apache]# ./bin/apachectl graceful

这个模块很实用,可以给你带来带宽的节省
比如如下配置:

   <IfModule mod_expires.c>
       ExpiresActive On
       ExpiresDefault “access plus 6 hours”
       ExpiresByType text/html “access plus 0 hours”
   </IfModule>

启用expires,默认缓存6小时,但不缓存 text/html
也就是访问阿权的网页
http://www.aslibra.com/blog/read.php?132 不会缓存网页
http://www.aslibra.com/blog/up/1158240093.jpg 缓存图片和脚本等

意思就是这样了

添加mod_rewrite.c模块

/etc/apache2/httpd.conf

加入

LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so

如果你的服务器apache还没有安装,那很简单,在编译apache时将mod_rewrite模块编译进去就可以,相关文档可以在 www.gbunix.com中找到。如果你的apache已经安装好了,现在只想编译出mod_rewrite.so模块,在apache中进行加载,下面我们就介绍这个方法。

以Solaris操作系统进行举例:

Ruby代码
  1. # PATH=/usr/local/bin:/usr/sfw/bin:/usr/ccs/bin:$PATH   
  2. # export PATH   
  3. # which gcc   
  4. # which make   
  5.   
  6. # find ./ -name mod_rewrite.c //在apache的安装目录中寻找mod_rewrite.c文件   
  7. # cd PATH/to/mod_rewrite.c //进入包含mod_rewrite.c文件的目录   
  8. # apxs -c mod_rewrite.c //apxs请指定绝对路径,在你当前正在使用apache的bin目录里   
  9. # apxs -i -a -n mod_rewrite mod_rewrite.c   
  10.   
  11.   
  12. [color=indigo]以下是加GeoIP模块的install方法。借鉴:[/color]   
  13. To build mod_geoip as a dynamically loadable module:   
  14.   
  15. apxs -i -a -L/usr/local/lib -I/usr/local/include -lGeoIP -c mod_geoip.c   
  16.   
  17. -I/usr/local/include is where the GeoIP.h header file is installed   
  18. -L/usr/local/lib is where the libGeoIP library is located   
  19.   
  20. This will put the correct LoadModule statement.  

如果没有什么错误的话,应该在你的apache的modules目录中编译出一个mod_rewrite.so文件。

编辑httpd.conf文件,确认httpd.conf中已经包含mod_rewrite.so的加载语句,如下:

LoadModule rewrite_module modules/mod_rewrite.s

怎么才能向一个已安装的程序里面添加模块?

前提:你的apache是支持dso模式的,否则只能重新完全编译:
方法1:
安装一份全新全新的完全相同版本的apache到另外一个目录,记得打开你需要的模块,然后把安装之后的模板拷贝或者调用到现在的。

方法2:
apxs方法,这个很简单:http://w.yi.org/ftp/FAPM/apache/Apache2/zh/programs/apxs.html
apxs – APache扩展工具
apxs是一个为Apache超文本传输协议(HTTP)服务器编译安装扩展模块的工具, 用于编译一个或多个源程序或目标代码文件为动态共享对象, 使之可以用mod_so中的LoadModule指令 在运行时刻加载到Apache服务器中。

因此,要使用这个扩展机制,你的平台必须支持DSO特性, 而且Apache的httpd必须内建了mod_so模块。 apxs工具能自动探测是否具备这样的条件,你也可以自己用这个命令手动探测

$ httpd -l

该命令的输出列表中应该有mod_so模块。 如果所有这些条件均已具备, 则可以很容易地借助apxs安装你自己的DSO模块以扩展Apache服务器的功能:

Ruby代码 复制代码
  1.   
  2. $ apxs -i -a -c mod_foo.c   
  3. gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c   
  4. ld -Bshareable -o mod_foo.so mod_foo.o   
  5. cp mod_foo.so /path/to/apache/modules/mod_foo.so   
  6. chmod 755 /path/to/apache/modules/mod_foo.so   
  7. [activating module `foo’ in /path/to/apache/etc/httpd.conf]   
  8. $ apachectl restart   
  9. /path/to/apache/sbin/apachectl restart: httpd not running, trying to start   
  10. [Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_module   
  11. /path/to/apache/sbin/apachectl restart: httpd started   
  12. $ _  

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

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