apache安装注意事项
Apache静态编译和动态编译
静态
在使用./configure编译的时候,如果不指定某个模块为动态,即没有使用:enable-mods-shared=module或者enable-module=shared这个2个中的一个,那么所有的默认模块为静态。那么何谓静态?其实就是编译的时候所有的模块自己编译进httpd这个文件中(我们启动可以使用这个执行文件,如:./httpd&),启动的时候这些模块就已经加载进来了,也就是可以使用了,通常为:<ifmodule></ifmodule>来配置。所以大家看到的配置都是<ifmodulemodule.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-cmod_proxy.cproxy_util.c(此时so文件在proxy/.libs,可以手动拷到apache的moudles文件夹中,再到http.conf文件中loadmodule加载)
apxs-c-imod_proxy_ajp.cajp*.c