Apache动态加载模块实例讲解

我们都知道apache有个优秀的功能就是模块化设计,很多第三方模块都可以在apache编译好了之后给加上,一下模块既可以在安装apache的时候静态编译好,也可以在apache编译好后,通过apache的扩展工具apxs来单独添加

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

这里我来引用网上的资料做个小结:

一共分为三个步骤

1,Apache在安装的时候必须加上--enable-so这个参数,也就是添加apache对DSO的支持,什么是DSO呢,她的全名为:Dynamic Shared Objects,即动态共享对象,具体apache如何编译,论坛上有,这里就不多说了

2,利用apxs扩展工具编译-安装

3,配置和重启apache,使第三方模块加载并应用

下面是两个经典实例

第一个实例:使用apxs直接安装
在apache安装好后,再编译第三方模块mod_limitipconn.c 这个模块是控制每个IP地址同时连接服务器某一个目录的并发连接数很棒的一个功能

cd /usr/local/src/ApacheSecure
bzip2 -d mod_limitipconn-0.23.tar.bz2
tar -xvf mod_limitipconn-0.23.tar
cd mod_limitipconn-0.23
/usr/local/apache2/bin/apxs -c -i -a mod_limitipconn.c



PS:这个是因为某些第三方模块只含有单一的.c文件[mod_limitipconn也可以使用第二种安装方法安装],具体的要看INSTALL和README文件:

其中-c -i -a 选项表示编译(compile)安装(install)启动(activate)
编译(compile)表示将源代码编译成机器能识别的二进 制文件;
安装(install)表示将编译后产生的.so文件放入Apache可以找到的位置,本例的位置是:/usr/local/apache2/modules/下面;
启动(activate)则表示将模块加入httpd.conf文件中。

此命令会自动在你Apache的配置文件httpd.conf中加入需要的信息,并且将生成的mod_limitipconn.so模块拷贝到 Apache的模块目录。
确认一下:
ls -l /usr/local/apache2/modules/mod_limitipconn.so
-rwxr-xr-x 1 root root 31848 2009-10-12 16:25 /usr/local/apache2/modules/mod_limitipconn.so



cat /usr/local/apache2/conf/httpd.conf | grep limitipconn
LoadModule limitipconn_module modules/mod_limitipconn.so


安装成功

安装成功后,启动此功能,实作限制:
/usr/local/apache2/conf/httpd.conf中 加入以下的配置:

ExtendedStatus On

<IfModule limitipconn_module>

<Location />                     #所限制的目录所在,此处是根目录/

MaxConnPerIP 5               #所限制的每个IP并发连接数为5个

NoIPLimit image/*             #对图片不做IP限制

</Location>

</IfModule>


保存退出。
重启apache即可.


测试效果:
在未启动此功能之前:我用影音传送带下载一个ISO文件,同时启动9个进程同时下载。9个进程同时正常下载。
在启动此功能之后:我用影音传送带下载一个ISO文件,同时启动9个进程同时下载。但只有前3个进程正常下载,后面的进程,一直重复连接。
  测试结果:成功。

第二个实例:使用模块源代码中的configure中使用–with-apxs安装:


以安装PHP为例:
  到php官方网站下载 : www.php.net
http://cn.php.net/get/php-5.2.8.tar.gz/from/a/mirror
cd /usr/local/src
wget http://cn.php.net/get/php-5.2.8.tar.gz/from/this/mirror
cd php-5.2.8
  配置php,将php与mysql以及apache关联,根据需要将相关文件安装到相关的目录中去。依个人需要而定,请了解以下各参数的作用后再进行下一 步:
/configure –with-apxs2=/usr/local/apache2/bin/apxs –prefix=/usr/local/php
make && make install
cp php.ini-dist /home/service/web/config/php/php.ini


注意:这里仅仅是演示,php在实际的应用中的编译参数是非常多的,例如连接数据库模块,编译GD等等

编辑apache的配置文件,并加入php相关参数:
vi /home/service/web/config/apache/conf/httpd.conf
在:

AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
下面增加:
AddType application/x-httpd-php .php

 

以及在:
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
加入index.php,以便让php的程序成为默认运行的程序:
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>


重启apache,以便让apache载入php模块:
/etc/init.d/apache2 restart
  测试php是否安装成功,是否跟mysql连接成功:
在 DocumentRoot,我们这里是:/home/www/html下,编辑phpinfo程序,即phpinfo.php,内容为:

<?php

phpinfo();

?>

这里注意:其实第一个实例也可以用第二个实例的方法编译,只不过他只提供了.c文件,按照他的INSTALL提示用第一种方法来编译了咯

posted on 2012-06-25 15:08  kudosharry  阅读(788)  评论(0编辑  收藏  举报

导航