设为首页 收藏本站
查看: 815|回复: 0

[经验分享] apache 静态编译和动态编译参考

[复制链接]

尚未签到

发表于 2018-11-19 11:49:48 | 显示全部楼层 |阅读模式
  apache-2.2.22 编译安装笔记
  一、静态编译
  在使用./configure 编译的时候,即没有使用--enable-mods-shared=[module]或者--enable-[module]=shared这2个中的一个,那么所有的默认模块为静态。何谓静态? 其实就是编译的时候所有的模块自己编译进httpd 这个文件中,启动的时候这些模块就已经加载进来了,也就是可以使用了,通常:  来配置。所以大家看到的配置都是  ,很显然,module.c这个东西已经存在httpd这个文件中了。
  第一次安装不带任何参数,只是指定一个安装目录
  ./configure --prefix=/app/apache2
  我们来看看默认静态编译安装有哪些模块
DSC0000.jpg

  二、动态编译
  就是编译的时候,使用--enable-mods-shared=[module]或者--enable-[module]=shared 来动态编译。 那么什么是动态? 静态是直接编译进httpd中, 那么动态显然就不编译进去了,也就是你启动的时候根本不会加载这个模块, 而是给你一个module.so 文件,你一定要使用 loadmodule 这个语法来加载,这个模块才有效。
  那么区别就出来了:静态的模块通常是在httpd.conf文件中使用 来配置, 动态使用loadmoule来加载,然后再配置。
  第二次安装使用动态编译安装,参数也只是多了一个
  ./configure --prefix=/app/apache2 --enable-mods-shared=all
  1) 可以看到默认被编译进httpd主文件只有几个核心的模块,也就是说这4个被静态编译进httpd主文件,随着主进程的开启就直接启动模块了。
DSC0001.jpg

  2) 再查看httpd.conf配置文件中包含了以下LoadModule 模块的行,共有51个,这些模块的路径都在modules/目录下,这些就是被动态加载的模块,如果你不需要某个模块,只要在行首加#就可以。但这51个模块并不是apache的所有模块,这一点需要搞清楚,在这51个模块之外的其他所有模块都需要在编译参数中明确指定,后面会讲到这一点。
  LoadModule authn_file_module modules/mod_authn_file.so
  LoadModule authn_dbm_module modules/mod_authn_dbm.so
  LoadModule authn_anon_module modules/mod_authn_anon.so
  LoadModule authn_dbd_module modules/mod_authn_dbd.so
  LoadModule authn_default_module modules/mod_authn_default.so
  LoadModule authz_host_module modules/mod_authz_host.so
  LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
  LoadModule authz_user_module modules/mod_authz_user.so
  LoadModule authz_dbm_module modules/mod_authz_dbm.so
  LoadModule authz_owner_module modules/mod_authz_owner.so
  LoadModule authz_default_module modules/mod_authz_default.so
  LoadModule auth_basic_module modules/mod_auth_basic.so
  LoadModule auth_digest_module modules/mod_auth_digest.so
  LoadModule dbd_module modules/mod_dbd.so
  LoadModule dumpio_module modules/mod_dumpio.so
  LoadModule reqtimeout_module modules/mod_reqtimeout.so
  LoadModule ext_filter_module modules/mod_ext_filter.so
  LoadModule include_module modules/mod_include.so
  LoadModule filter_module modules/mod_filter.so
  LoadModule substitute_module modules/mod_substitute.so
  LoadModule deflate_module modules/mod_deflate.so
  LoadModule log_config_module modules/mod_log_config.so
  LoadModule log_forensic_module modules/mod_log_forensic.so
  LoadModule logio_module modules/mod_logio.so
  LoadModule env_module modules/mod_env.so
  LoadModule mime_magic_module modules/mod_mime_magic.so
  LoadModule cern_meta_module modules/mod_cern_meta.so
  LoadModule expires_module modules/mod_expires.so
  LoadModule headers_module modules/mod_headers.so

  LoadModule>  LoadModule usertrack_module modules/mod_usertrack.so
  LoadModule unique_id_module modules/mod_unique_id.so
  LoadModule setenvif_module modules/mod_setenvif.so
  LoadModule version_module modules/mod_version.so
  LoadModule mime_module modules/mod_mime.so
  LoadModule dav_module modules/mod_dav.so
  LoadModule status_module modules/mod_status.so
  LoadModule autoindex_module modules/mod_autoindex.so
  LoadModule asis_module modules/mod_asis.so
  LoadModule info_module modules/mod_info.so
  LoadModule cgi_module modules/mod_cgi.so
  LoadModule dav_fs_module modules/mod_dav_fs.so
  LoadModule vhost_alias_module modules/mod_vhost_alias.so
  LoadModule negotiation_module modules/mod_negotiation.so
  LoadModule dir_module modules/mod_dir.so
  LoadModule imagemap_module modules/mod_imagemap.so
  LoadModule actions_module modules/mod_actions.so
  LoadModule speling_module modules/mod_speling.so
  LoadModule userdir_module modules/mod_userdir.so
  LoadModule alias_module modules/mod_alias.so
  LoadModule rewrite_module modules/mod_rewrite.so
  ./configure --prefix=/app/apache2 --enable-so --enable-mods-shared=all
  结果:同上(只要--enable-mods-share=all,可以不用加--enable-so)
  说明:
  --enable-mods-shared=all 意思是动态加载所有模块(并不是说apache所有的模块都已经通过这条命令被加载进来了),--enable-mods=all表示静态加载所有模块(后面会有举例)。由于编译参数中使用了动态加载所有模块,所以其它需要被编译进来的模块都会以动态加载模块方式进行编译。
  三、通过举例验证
  例举1  我们来看以下这个编译参数
  ./configure --prefix=/app/apache2
  --enable-mods-shared=all
  --enable-cache
  --enable-mem-cache
  --enable-file-cache
  --enable-disk-cache
  --enable-mods-shared=all 动态加载所有模块,httpd.conf中默认会动态加载51个模块(以LoadModule 开始的方式)。
  --enable-cache --enable-mem-cache --enable-file-cache --enable-disk-cache 而这四个相关cache模块会以动态模块方式被加载,也就是httpd.conf中以LoadModule的模块会多这4个,那就是共有55个动态模块了。
  从以上编译参数可以看出只要编译中有--enable-mods-shared=all 这个参数,那么之后所有你想要增加的模块都会以动态模式来安装,也就是最终在 httpd.conf 中以LoadModule形式来加载模块。
  有的朋友说还有一条 --enable-mods-shared=most 意思是动态加载大多数模块,这个大多数其实就是在上面51个模块中少了的那几个模块(用红色表示出来了)。我个人觉得这个--enable-mods-shared=most 就是少了几个模块,并无实际什么特别,如果编译参数中有这条,那么其他所有指定的模块也都会以动态模块来安装。
  例举2  刚刚上面提到了--enable-mods=all我们来看看这个编译参数
  ./configure --prefix=/app/apache2
  --enable-mods=all
  --enable-cache
  --enable-mem-cache
  --enable-file-cache
  --enable-rewrite
  --enable-mods=all 静态编译所有模块,很明显这个编译参数是把所有的模块将会以静态方式来编译,编译好后,我们来看看结果
DSC0002.jpg

  我们可以看到除了默认模块,指定的几个模块(mod_file_cache.c  mod_cache.c  mod_mem_cache.c mod_rewrite.c)都被静态编译进来了。
  例举3 这个参数跟例举2的参数很相似,只是我指定几个为动态加载模块
  ./configure --prefix=/app/apache2
  --enable-mods=all
  --enable-cache=shared
  --enable-mem-cache=shared
  --enable-file-cache
  --enable-rewrite=shared
  其结果就是--enable-file-cache 是静态编译,其他3个有shared的都是动态编译,在httpd.conf中以LoadModule 开头的行。
  例举4
  ./configure --prefix=/app/apache2
  --enable-modules=all
  结果如下,有55个静态模块
  core.c
  mod_authn_file.c
  mod_authn_dbm.c
  mod_authn_anon.c
  mod_authn_dbd.c
  mod_authn_default.c
  mod_authz_host.c
  mod_authz_groupfile.c
  mod_authz_user.c
  mod_authz_dbm.c
  mod_authz_owner.c
  mod_authz_default.c
  mod_auth_basic.c
  mod_auth_digest.c
  mod_dbd.c
  mod_dumpio.c
  mod_reqtimeout.c
  mod_ext_filter.c
  mod_include.c
  mod_filter.c
  mod_substitute.c
  mod_deflate.c
  mod_log_config.c
  mod_log_forensic.c
  mod_logio.c
  mod_env.c
  mod_mime_magic.c
  mod_cern_meta.c
  mod_expires.c
  mod_headers.c
  mod_ident.c
  mod_usertrack.c
  mod_unique_id.c
  mod_setenvif.c
  mod_version.c
  prefork.c
  http_core.c
  mod_mime.c
  mod_dav.c
  mod_status.c
  mod_autoindex.c
  mod_asis.c
  mod_info.c
  mod_cgi.c
  mod_dav_fs.c
  mod_vhost_alias.c
  mod_negotiation.c
  mod_dir.c
  mod_imagemap.c
  mod_actions.c
  mod_speling.c
  mod_userdir.c
  mod_alias.c
  mod_rewrite.c
  mod_so.c
  例举5
  ./configure --prefix=/app/apache2
  --enable-modules=all
  --enable-mods-shared=all
  --enable-cache=static
  --enable-disk-cache=static
  --enable-mem-cache=static
  --enable-file-cache
  --enable-ssl
  结果是指定--enable-[module]=static的模块为静态编译,其他都是动态编译
  总结三点:
  1) 如果编译参数中有--enable-mods-shared=all 或者--enable-mods-shared=most,那么所有--enable-[module]都将会以动态模式来编译,除非特别指定--enable-[module]=static 为静态编译 。
  2)如果编译参数中有--enable-mods=all 指定所有静态方式的话,还可以用--enable-[module]=shared来动态加载模块。
  3)特别注意如果编译参数中既有--enable-mods=all静态编译又有--enable-mods-shared=all动态编译,那么最终会使用动态编译。
  官方说是静态编译比动态编译性能要好5%左右,具体没有验证过。
  推荐编译安装参数,以下是静态编译所有模块,但保留动态加载选项--enable-so,之后还是可以在配置文件中动态加载自己编译的模块。
  ./configure --prefix=/app/apache2
  --enable-modules=all
  --enable-cache=static
  --enable-mem-cache=static
  --enable-file-cache=static
  --enable-disk-cache=static
  --enable-ssl=satic
  --enable-so


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-636978-1-1.html 上篇帖子: apache环境下web站点禁止用服务器ip访问 下篇帖子: linux系统中apache虚拟目录配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表