您的位置:首页 > 运维架构 > Apache

Apache静态编译与动态编译的区别

2016-04-01 22:55 1506 查看

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

如果指定了大 111c 多数模块的编译方式,且指定了单个模块,但没有指定单个模块的编译方式,则单个模块的编译方式和大多数模块的编译方式相同。

也可以禁用某模块进行编译,以--disable开头。

httpd -D DUMP_MODULES: 查看已经加载的所有静态和动态模块。

apachectl-l: 查看已经加载的所有静态模块。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息