我们都知道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提示用第一种方法来编译了咯