日期:2014-05-17  浏览次数:20835 次

apache安装注意事项
Apache静态编译和动态编译

静态

在使用./configure编译的时候,如果不指定某个模块为动态,即没有使用:enable-mods-shared=module或者enable-module=shared这个2个中的一个,那么所有的默认模块为静态。那么何谓静态? 其实就是编译的时候所有的模块自己编译进httpd这个文件中(我们启动可以使用这个执行文件,如:./httpd &),启动的时候这些模块就已经加载进来了,也就是可以使用了,通常为:<ifmodule> </ifmodule>来配置。所以大家看到的配置都是<ifmodule module.c> ,很显然,module.c这个东西已经存在httpd这个文件中了。

动态:

就是编译的时候,使用enable-module=shared或者enable-modules-shared=module来动态编译。 那么什么是动态? 静态是直接编译进httpd中,那么动态显然就不编译进去了,也就是你启动的时候根本不会加载这个模块,而是给你一个module.so文件,你一定要使用loadmodule这个语法来加载,这个模块才有效。

那么区别就出来了:静态的模块通常是<ifmodule></ifmodule>来配置,动态使用loadmoule来加载,然后再配置。

centos环境下,apache安装后modules包中没有任何so文件,原因可能是安装编译的时候参数不对,google了以后借鉴过来人的经验:
./configure --prefix=/opt/httpd2 --with-ssl=/opt/openssl-0.9.8k --with-mpm=prefork --enable-so --enable-mods-shared=all --enable-modules=all --enable-dav

动态加载so模块

安装后modules没有我们想要的so模块,比如,mod_rewrite.so
  可以动态增加,方法:
  
# find . -name mod_rewrite.c //在apache的源码安装目录中寻找mod_rewrite.c文件
# cd PATH/to/mod_rewrite.c //进入包含mod_rewrite.c文件的目录
# /usr/local/apache/bin/apxs -c mod_rewrite.c //apxs应指定绝对路径,在你当前正在使用apache的bin目录里
# /usr/local/apache/bin/apxs -i -a -n mod_rewrite mod_rewrite.la

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



其他模块增加举例:

apxs -i -a -c mod_proxy.c proxy_util.c (此时so文件在proxy/.libs,可以手动拷到apache的moudles文件夹中,再到http.conf文件中loadmodule加载)
apxs -c -i mod_proxy_ajp.c ajp*.c