Apache静态编译与动态编译的区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache静态编译与动态编译的区别相关的知识,希望对你有一定的参考价值。
Apache拥有4层结构,从核心到外层的module。而外层的module可以用通过静态和动态两种方式与Apache共同工作。这也就引入下文的“动态”和“静态”两种编译安装方式。
静态编译:
编译的时候,所有的模块自己编译进 httpd 这个文件中,启动Apache的时候这些模块就已经加载进来了,只要在 <ifmodule></ifmodule>中来配置就可以了。
动态编译:
编译的时候,使用--enable-mods-shared=MODULE-LIST来动态编译。编译完成后在modules/下有.so文件,对应在httpd.conf文件的LoadModule位置,如果要使用某模块,则启用此LoadModule,然后再<ifmodule></ifmodule>配置,这个模块才有效。
官方说静态的比动态的在性能方面多5%左右。相对来说,静态的效率高些,而动态方式配置方面灵活。
以httpd2.4.4为例,./configure --help里显示了如下3种方式:
--enable-modules=MODULE-LIST
--enable-mods-shared=MODULE-LIST
--enable-mods-static=MODULE-LIST
后面可以跟"all", "most","few", "reallyall". 这3种方式是对所有或大多数的模块进程编译,单个模块的编译以其他方式呈现。经过测试,--enable-modules和--enable-mods-shared效果一致,都是动态编译,而--enable-mods-static是静态编译。如果要明确指定对某模块的编译方式,模块名后面要跟static或shared指出。模块名以./configure--help的输出为准。如大多数模块要使用动态编译,而cgi模块要静态编译,则
./configure --enable-mods-shared=all--enable-cgi=static --with-apr=/usr/local/apr--with-apr-util=/usr/local/apr-util |
如果指定了大多数模块的编译方式,且指定了单个模块,但没有指定单个模块的编译方式,则单个模块的编译方式和大多数模块的编译方式相同。
也可以禁用某模块进行编译,以--disable开头。
httpd -D DUMP_MODULES: 查看已经加载的所有静态和动态模块。
apachectl-l: 查看已经加载的所有静态模块。
以上是关于Apache静态编译与动态编译的区别的主要内容,如果未能解决你的问题,请参考以下文章