apache 静态编译和动态编译参考
apache-2.2.22 编译安装笔记
一、静态编译
在使用./configure 编译的时候,即没有使用--enable-mods-shared=[module]或者--enable-[module]=shared这2个中的一个,那么所有的默认模块为静态。何谓静态? 其实就是编译的时候所有的模块自己编译进httpd 这个文件中,启动的时候这些模块就已经加载进来了,也就是可以使用了,通常:<ifmodule> </ifmodule> 来配置。所以大家看到的配置都是<ifmodule module.c> ,很显然,module.c这个东西已经存在httpd这个文件中了。
第一次安装不带任何参数,只是指定一个安装目录
./configure --prefix=/app/apache2
我们来看看默认静态编译安装有哪些模块
二、动态编译
就是编译的时候,使用--enable-mods-shared=[module]或者--enable-[module]=shared 来动态编译。 那么什么是动态? 静态是直接编译进httpd中, 那么动态显然就不编译进去了,也就是你启动的时候根本不会加载这个模块, 而是给你一个module.so 文件,你一定要使用 loadmodule 这个语法来加载,这个模块才有效。
那么区别就出来了:静态的模块通常是在httpd.conf文件中使用<ifmodule></ifmodule> 来配置, 动态使用loadmoule来加载,然后再配置。
第二次安装使用动态编译安装,参数也只是多了一个
./configure --prefix=/app/apache2 --enable-mods-shared=all
1) 可以看到默认被编译进httpd主文件只有几个核心的模块,也就是说这4个被静态编译进httpd主文件,随着主进程的开启就直接启动模块了。
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 ident_module modules/mod_ident.so 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 静态编译所有模块,很明显这个编译参数是把所有的模块将会以静态方式来编译,编译好后,我们来看看结果
我们可以看到除了默认模块,指定的几个模块(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_dbd.c |
mod_expires.c |
mod_info.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
apache编译配置参数:
http://blog.snsgou.com/post-240.html
http://blog.chinaunix.net/uid-20784749-id-1844507.html
关于动态编译和静态编译的比方说明:
好比有两个人a和m
a代表apache,m代表module
要想让a使用m的东西
一个方法是把m的东西都放到a那里去,a使用的时候就是现成的了
就是所谓的静态编译
还有一个方法,
就是告诉a, m的住址,当a要使用m的东西的时候,a去找m,然后使用
不过,这种方法要注意的一个问题就是:m必须要有实际的住址,
否则a会找不到m而产生错误的,我此文开始提到的 apachectl startssl产生
的错误就是这个原因,应该再编译好ssl才可以的.
这种方法也就是apache 的动态(DSO)编译了.
参考:http://httpd.apache.org/docs/2.4/
转载于:https://www.cnblogs.com/Alight/p/4707100.html
apache 静态编译和动态编译参考相关推荐
- .Net Core Razor 预编译,动态编译,混合编译
预编译 预编译是ASP .Net Core的默认方式.在发布时,默认会将系统中的所有Razor视图进行预编译.编译好的视图DLL统一命名为 xxx.PrecompiledViews.dll 或者 xx ...
- arm-linux-gcc静态编译和动态编译的区别
很多教程会提到加上-static是静态编译,但对于新手来说没有用例子来说明可能不太好理解,今天我就介绍一下关于这方面知识的一个例子: 最近在做一个关于freetype字体的东西,需要依赖freetyp ...
- linux 驱动编译静态,Linux驱动静态编译和动态编译方法详解
内核源码树的目录下都有两个文档Kconfig和Makefile.分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文档相关的内核配置菜单.在内核配置m ...
- Windows核心编程_静态编译和动态编译的区别
1.静态编译 静态就是将需要的系统dll打包进PE文件(关于PE文件的深刻介绍博主会在后面对其进行介绍)中,编译器会将这些模块码,或资源文件的数据,全部添加到可执行文件中,存放在可执行文件的模块区或资 ...
- 静态编译和动态编译区别
静态函数库 一般扩展名为(.a),这类的函数库通常扩展名为libxxx.a . 这类函数库在编译的时候会直接整合到程序中,所以利用静态函数库编译成的文件会比较大,这类函数库最大的优点就是编译成功的可执 ...
- netcore 编译 html dll,ASP.NET Core Razor 视图预编译、动态编译
0x01 前言 ASP.NET Core在默认发布情况下,会启动预编译将试图编译成xx.Views.dll,也许在视图中打算修改一处很细小的地方我们需要再重新编译视图进行发布.下面我将从 ASP.NE ...
- java 动态编译 canino_java动态编译
在HotSpot虚拟机中,有两个技术是至关重要的,即动态编译(Dynamic compilation)和Profiling. HotSpot是如何动态编译Javad的bytecode呢?Java by ...
- ASP.NET Core Razor 视图预编译、动态编译
0x01 前言 ASP.NET Core在默认发布情况下,会启动预编译将试图编译成xx.Views.dll,也许在视图中打算修改一处很细小的地方我们需要再重新编译视图进行发布.下面我将从 ASP.NE ...
- java 动态编译_Java动态编译
概述: Java的动态编译就是在运行期直接编译.java文件,执行.class,并且能够获得相关的输入输出,甚至还能监听相关的事件. 步骤: 1.创建或自动生成.java文件 2.调用JavaComp ...
最新文章
- SQLite Insert 语句(http://www.w3cschool.cc/sqlite/sqlite-insert.html)
- Object(包装对象)
- 依赖反转原理,IoC容器和依赖注入:第1部分
- 问题 A: 编写函数:比较三个数大小 (Append Code)
- android 调用百度地图api
- oracle 获取awk报告,Oracle 使用 ass.awk 工具查看 system state dump 说明
- 嵌入式Linux入门:概述
- html5输入框点击后消除高光,请问(VR渲染)光域网的灯光怎么把“高光”去掉?...
- 黑苹果 macos 教程
- 基于R语言的模型组合
- 联想小新300加固态_Lenovo 联想 小新310 硬盘移位加装SSD
- 中兴路由器,交换机DHCP原理,dhcp配置,实例
- 微博html5版什么手机,搜狐微博推出全新手机HTML5触屏版
- 操作系统实验5 设备管理
- 小游戏项目及分工情况
- 《权力的游戏》剧情解析全靠它!
- 盒子模型之京东快报页面
- Android studio Build时,Download maven-metadata.xml卡住不动的问题
- java form的时间格式_java date日期格式
- Python全栈工程师(25:Mysql数据库)
热门文章
- java删除字符串最后一位
- vscode工作区是什么意思_空压机的容积流量和工作压力是什么意思?
- mysql php pdo例_PHP的PDO操作实例
- js实现modbus_nodejs中使用modbus-serial库创建Modbus TCP读取设备的数据
- 硬件技巧:如何隐设置的你的电脑U盘不可见
- Windows系统优化12个默认设置
- gdb查看空指针 linux_5 个鲜为人知 GNU 调试器(GDB)技巧
- 天大18年c语言离线作业,天大18秋C语言程序设计在线作业一辅导资料.docx-资源下载在线文库www.lddoc.cn...
- mysql设置环境变量
- CENTOS7 Python3.7 PyAudio 安装