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

我们来看看默认静态编译安装有哪些模块
apache <wbr>静态编译和动态编译参考


二、动态编译

就是编译的时候,使用--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主文件,随着主进程的开启就直接启动模块了。

apache <wbr>静态编译和动态编译参考

 

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表示静态加载所有模块(后面会有举例)。由于编译参数中使用了动态加载所有模块,所以其它需要被编译进来的模块都会以动态加载模块方式进行编译。

 

三、通过举例验证

例举 我们来看以下这个编译参数

./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 静态编译所有模块,很明显这个编译参数是把所有的模块将会以静态方式来编译,编译好后,我们来看看结果

apache <wbr>静态编译和动态编译参考

我们可以看到除了默认模块,指定的几个模块(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

 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290711.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jQuery插件ASP.NET应用之AjaxUpload

本次使用AJAXUPLOAD做为上传客户端无刷上传插件&#xff0c;其最新版本为3.9&#xff0c;官方地址&#xff1a;http://valums.com/ajax-upload/ 在页面中引入 jquery.min.1.4.2.js 和 ajaxupload.js Html代码 <script src"Scripts/jquery-1.4.2.min.js" type&quo…

Avalonia跨平台入门第十一篇之自定义Window

在前面分享的几篇中咱已经玩耍了Popup、ListBox多选、Grid动态分、RadioButton模板、控件的拖放效果、控件的置顶和置底、控件的锁定;今天趁着周末接着去摸索自定义Window样式,毕竟自带的样式不太让人满意;最终实现的效果如下图:前台Window样式:后台Window代码:咱也基于AvalonS…

ie8下修改input的type属性报错

摘要&#xff1a; 现在有一个需求如图所示&#xff0c;当用户勾选显示明文复选框时&#xff0c;要以明文显示用户输入的密码&#xff0c;去掉勾选时要变回密文&#xff0c;刚开始想到的就是修改输入框的type来决定显示明文还是密文&#xff0c;使用jQuery的attr来做试验&#x…

dotNet Core使用SignalR实现websocket

前言:最近有一个公司项目做一个排队叫号系统&#xff0c;系统功能不复杂&#xff0c;所以后端就我一人&#xff0c;难点在于消息推送到安卓屏上&#xff0c;最近有点时间&#xff0c;把我工作中使用的技术分享出来&#xff01;整个技术架构:前端使用vue uniapp&#xff0c;后端…

《手机测试Robotium实战教程》——导读

本节书摘来自异步社区《手机测试Robotium实战教程》一书中的导读&#xff0c;作者 杨志伟&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看 目 录前 言第1章 自动化测试简介 1.1节何为自动化测试1.2节自动化测试和手动测试的对比1.3节移动端自动化测试工具的选…

为record类型自定义Equals方法

前言record类型&#xff0c;这是一种新引用类型&#xff0c;而不是类或结构。record与类不同&#xff0c;区别在于record类型使用基于值的相等性。例如&#xff1a;public record DemoRecord(int id);public class DemoClass {public DemoClass(int id){this.id id;}public in…

解决IDEA修改已有项目为maven项目时目录结构被改变的问题

Idea可以在项目根目录上右键选择“添加框架支持”&#xff0c;选择maven&#xff0c;为项目添加Maven支持。 但这样会导致原有项目的目录结构被破坏。 更好的方法是在根目录添加pom.xml文件 在<build>标签内添加 <sourceDirectory>标签&#xff0c;并填入源码根目…

排序——选择排序

选择排序 作者&#xff1a;上品物语 知识点&#xff1a; 原理示意图算法特点复杂度1.1 原理 首先&#xff0c;找到数组中最小的那个元素&#xff0c;其次&#xff0c;将它和数组的第一个元素交换位置&#xff08;如果第一个元素就是最小元素&#xff0c;那么它就和自己交换&…

.Net/C#分库分表高性能O(1)瀑布流分页

框架介绍依照惯例首先介绍本期主角:ShardingCore 一款ef-core下高性能、轻量级针对分表分库读写分离的解决方案&#xff0c;具有零依赖、零学习成本、零业务代码入侵dotnet下唯一一款全自动分表,多字段分表框架,拥有高性能,零依赖、零学习成本、零业务代码入侵,并且支持读写分离…

centos静默安装oracle关于报错UnsatisfiedLinkError exception loading native library:njni10

静默安装oracle时&#xff0c;日志文件中打印出如下语句 提示Oracle NetConfiguration Assistant failed&#xff0c;原因是找不到libaio.so.1 这是缺少依赖 执行指令 yum -y install libaio* libaio-devel* 删除home文件夹&#xff0c;再次执行 ./runInstaller -silent…

Ant—使用Ant构建一个简单的Java工程(两)

博客《Ant—使用Ant构建一个简单的Java项目&#xff08;一&#xff09;》演示了使用Ant工具构建简单的Java项目&#xff0c;接着这个样例来进一步学习Ant&#xff1a;上面样例须要运行多条ant命令才干运行Test类中的main函数&#xff0c;能不能简化须要运行命令呢&#xff1f;答…

Java Thread Status(转)

public static enum Thread.State extends Enum<Thread.State>线程状态。线程可以处于下列状态之一&#xff1a; 1.NEW 至今尚未启动的线程的状态。 2.RUNNABLE 可运行线程的线程状态。 处于可运行状态的某一线程正在 Java 虚拟机中运行&#xff0c;但它可能正在…

秀!微软《550页图解.Net+WPF完整版》.pdf 附下载!

赶紧看看微软公司基于最新的.netwpf编写文档。对于零基础可以作为.net的快速入门教材&#xff0c;对于高级程序员而言&#xff0c;这也是你的充电之路&#xff01;NO.1资料介绍该手册,全面的介绍.net的新特性&#xff0c;看完这个资料&#xff0c;你能够对.net/c#WPF的新功能&a…

《移动App测试的22条军规》—第1章1.2节移动App的生命周期

本节书摘来自异步社区《移动App测试的22条军规》一书中的第1章&#xff0c;第1.2节移动App的生命周期&#xff0c;作者黄勇&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.2 移动App的生命周期移动App测试的22条军规&#xff08;1&#xff09;对于还处于…

电子商务应用课程知识整理 第一章-电子商务概述与类型

一、电子商务定义 电子商务&#xff08;Electronic Commerce&#xff0c;简称EC&#xff09;&#xff0c;是指在全球各地广泛的商业贸易活动中&#xff0c;在因特网开放的网络环境下&#xff0c;基于客户端&#xff08;浏览器、移动端&#xff09;/服务器&#xff0c;买卖双方…

电子商务应用课程知识整理 第二章-电子商务相关知识与技术

一、万维网 万维网&#xff08;亦作“网络”、www、Web或World Wide Web&#xff09;&#xff0c;是一个资源空间。在这个空间中包含一些有用的事务&#xff0c;有一个”统一资源标识符“&#xff08;URL&#xff09;表示。这些资源通过超文本传输协议&#xff08;HTTP&#x…

Avalonia跨平台入门第十三篇之Expander控件

在前面分享的几篇中咱已经玩耍了Popup、ListBox多选、Grid动态分、RadioButton模板、控件的拖放效果、控件的置顶和置底、控件的锁定、自定义Window样式、动画效果;今天趁着空闲时间接着去摸索基于Expander控件实现的效果,最终实现的效果如下图:来看看具体的布局:Expander控件样…

《版式设计——日本平面设计师参考手册》—第1章应用对象样式

本节书摘来自异步社区《版式设计——日本平面设计师参考手册》一书中的第1章应用对象样式&#xff0c;作者Designing编辑部,更多章节内容可以访问云栖社区“异步社区”公众号查看。 应用对象样式版式设计——日本平面设计师参考手册对象样式可以帮助我们更有效率地进行工作。 h…

软件概要设计做什么,怎么做

2019独角兽企业重金招聘Python工程师标准>>> 作者&#xff1a;赵磊 博客&#xff1a;http://elf8848.iteye.com 软件概要设计做什么&#xff0c;怎么做 一、软件设计一般流程&#xff1a; 1、先前的软件需求分析阶段&#xff0c;已经搞清楚了 “要解决什么问题”…

开源社区的激励模型

| 作者&#xff1a;庄表伟| 编辑&#xff1a;刘雪洁| 设计&#xff1a;宋传琪| 责编&#xff1a;王玥敏缘起开源社区里的激励模型&#xff0c;其实是一个经久不衰的老话题。4年多以前&#xff0c;我还写过一篇《区块链技术是否会终结开源时代&#xff1f;》&#xff0c;也是在讨…