精华内容
参与话题
问答
  • Apache动态静态编译 &工作模式MPM

    千次阅读 2016-04-15 23:44:24
    apache 动态与静态 编译 三种MPM

    apache 动态编译与静态编译
    首先是默认的静态编译安装这些模块是默认的:

    [root@doita bin]#./apachectl -l
    Compiled in modules:
      core.c
      mod_authn_file.c
      mod_authn_default.c
      mod_authz_host.c
      mod_authz_groupfile.c
      mod_authz_user.c
      mod_authz_default.c
      mod_auth_basic.c
      mod_include.c
      mod_filter.c
      mod_log_config.c
      mod_env.c
      mod_setenvif.c
      mod_version.c
      prefork.c
      http_core.c
      mod_mime.c
      mod_status.c
      mod_autoindex.c
      mod_asis.c
      mod_cgi.c
      mod_negotiation.c
      mod_dir.c
      mod_actions.c
      mod_userdir.c
      mod_alias.c
      mod_so.c

    关于动态安装的优缺点 官方文档给出了如下说明:

    上述基于DSO的功能有如下优点:
    由于服务器包的装配工作可以在运行时使用httpd.conf中的配置命令LoadModule来进行,而不是在编译中使用编译选项来进行,因此显得更灵活。比如,只需要安装一个Apache,就可以运行多个不同的服务器实例(如标准&SSL版本,浓缩&功能加强版本[mod_perl、PHP])。

    服务器可以在安装后使用第三方模块被轻易地扩展。这至少对厂商发行包的维护者有巨大的好处,他可以建立一个Apache核心包,而为诸如PHP、mod_perl、mod_fastcgi等扩展另建附加的包。
    更简单的Apache模块原型。使用DSO配合apxs,可以脱离Apache源代码树,仅需要一个 apxs -i 和一个 apachectl restart 命令,就可以把刚开发的新模块纳入到运行中的Apache服务器。

    DSO有如下缺点:
    由于并不是所有操作系统都支持动态加载代码到一个程序的地址空间,因此DSO机制并不能用于所有平台。
    由于Unix加载器必须进行符号解析,服务器的启动会慢20%左右。
    在某些平台上,位置独立代码(positon independent code[PIC])需要复杂的汇编语言技巧来实现相对寻址,而绝对寻址则不需要,因此服务器在运行时会慢5%左右。
    由于DSO模块不能在所有平台上被其他基于DSO的库所连接(ld -lfoo),比如,基于a.out的平台通常不提供此功能,而基于ELF的平台则提供,因此DSO机制并不能被用于所有类型的模块。或者可以这样说,编译为DSO文件的模块只能使用由Apache核心、C库(libc)和Apache核心所用的所有其他动态或静态的库、含有独立位置代码的静态库(libfoo.a)所提供的符号。而要使用其他代码,就只能确保Apache核心本身包含对此代码的引用,或者自己用dlopen()来加载此代码。
    动态编译其实就是把哪些模块独立起来,脱离了apache本身的二进制主体部分.默认加载.so文件的模块是在apache主体中的.动态编译有几个选项,将上面的模块部分进行动态编译的.

      --enable-mods-shared=max  所有标准的动态模块都编译为dso
       --enable-mods-shared=most 常用的,把那些不常用的放在一边.
       --enable-mods-shared=all  意思是动态加载所有模块,如果去掉-shared话,是静态加载所有模块

    以上为2.0以后的版本,对于1.3之前的版本,语法有所不同.
    (参考如下http://apps.hi.baidu.com/share/detail/21938370)

    客户环境的静态编译modules为

    bash-3.00# apachectl -l
      Compiled in modules:
      core.c
      prefork.c
      http_core.c
      mod_so.c

    以上是2.0的,后来证实是版本问题.2.2之后多了很多静态模块.

    使用静态与动态模块的语法不同:静态的可以直接使用,而动态的需要加载 如下

    LoadModule access_module modules/mod_access.so
    LoadModule auth_module modules/mod_auth.so
    LoadModule auth_anon_module modules/mod_auth_anon.so

    在动态编译时,可能需要zlib-devel 来支持服务器端压缩传输功能.

    转自:http://blog.chinaunix.net/uid-24799710-id-3030355.html

    三种MPM介绍

     Apache 2.X 支持插入式并行处理模块,称为多路处理模块(MPM)。在编译apache时必须选择也只能选择一个MPM,对类UNIX系统,有几个不同的MPM可供选择,它们会影响到apache的速度和可伸缩性。

      Prefork MPM : 这个多路处理模块(MPM)实现了一个非线程型的、预派生的web服务器,它的工作方式类似于Apache 1.3。它适合于没有线程安全库,需要避免线程兼容性问题的系统。它是要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就不会影响到其他请求。

      这个MPM具有很强的自我调节能力,只需要很少的配置指令调整。最重要的是将MaxClients设置为一个足够大的数值以处理潜在的请求高峰,同时又不能太大,以致需要使用的内存超出物理内存的大小。

      Worker MPM : 此多路处理模块(MPM)使网络服务器支持混合的多线程多进程。由于使用线程来处理请求,所以可以处理海量请求,而系统资源的开销小于基于进程的MPM。但是,它也使用了多进程,每个进程又有多个线程,以获得基于进程的MPM的稳定性。

      每个进程可以拥有的线程数量是固定的。服务器会根据负载情况增加或减少进程数量。一个单独的控制进程(父进程)负责子进程的建立。每个子进程可以建立ThreadsPerChild数量的服务线程和一个监听线程,该监听线程监听接入请求并将其传递给服务线程处理和应答。

      不管是Worker模式或是Prefork 模式,Apache总是试图保持一些备用的(spare)或者是空闲的子进程(空闲的服务线程池)用于迎接即将到来的请求。这样客户端就不需要在得到服务前等候子进程的产生。

      Event MPM:以上两种稳定的MPM方式在非常繁忙的服务器应用下都有些不足。尽管HTTP的Keepalive方式能减少TCP连接数量和网络负载,但是 Keepalive需要和服务进程或者线程绑定,这就导致一个繁忙的服务器会耗光所有的线程。 Event MPM是解决这个问题的一种新模型,它把服务进程从连接中分离出来。在服务器处理速度很快,同时具有非常高的点击率时,可用的线程数量就是关键的资源限 制,此时Event MPM方式是最有效的。一个以Worker MPM方式工作的繁忙服务器能够承受每秒好几万次的访问量(例如在大型新闻服务站点的高峰时),而Event MPM可以用来处理更高负载。值得注意的是,Event MPM不能在安全HTTP(HTTPS)访问下工作。

    对于Event 模式,apache给出了以下警告:

    This MPM is experimental, so it may or may not work as expected .

    这种MPM目前处于试验状态,他可能不能按照预期的那样工作。

    展开全文
  • 有时候,我们需要调试apache的一个模块,比如mod_ssl,可我们又不希望全工程编译编译完还得配置,简单的办法就是只编译一个模块,替换到现有的apache中,网上搜索资料,目前未发现完整的,经过自己对编译配置的...
    资料时间:2013年

    分享时间:2013年到百度空间,空间关闭,重新整理

    有时候,我们需要调试apache的一个模块,比如mod_ssl,可我们又不希望全工程编译,编译完还得配置,简单的办法就是只编译一个模块,替换到现有的apache中,网上搜索资料,目前未发现完整的,经过自己对编译配置的分析,总结出完整的办法:

    1. 生成动态编译的Makefile./configure --enable-ssl=shared --with-ssl CFLAGS='-g -O0' 这里是包含ssl动态模块的示例。如果不指定,则默认不包含。CFLAGS是指定编译不优化的debug版。

    2. 进入到指定的模块目录 ,ssl的是modules/ssl,执行make shared-build,这个是重点,大部分查阅的资料都没有明说,直接make不会进行真的模块编译。

    3. 安装,如果需要安装到系统环境里,make install即可,如果希望直接拿走,在.libs目录,ssl的是.libs/mod_ssl.so。


    展开全文
  • 静态:在使用./configure 编译的时候,如果不指定某个模块动态,即没有使用:enable-mods-shared=module或者enable-module=shared 这个2个中的一个,那么所有的默认模块为静态。 那么何谓静态? 其实就是编译的...

    静态:

    在使用./configure 编译的时候,如果不指定某个模块为动态,即没有使用:enable-mods-shared=module或者enable-module=shared 这个2个中的一个,那么所有的默认模块为静态。 那么何谓静态?  其实就是编译的时候所有的模块自己编译进 httpd 这个文件中(我们启动可以使用这个执行文件,如: ./httpd & ) ,启动的时候这些模块就已经加载进来了,也就是可以使用了, 通常为:<ifmodule> </ifmodule> 来配置。所以大家看到的配置都是 <ifmodule  module.c>  ,很显然,module.c这个东西已经存在 httpd这个文件中了。

    动态:

    就是编译的时候,使用enable-module=shared 或者enable-modules-shared=module 来动态编译。  那么什么是动态?  静态是直接编译进httpd中, 那么动态显然就不编译进去了,也就是你启动的时候根本不会加载这个模块, 而是给你一个module.so 文件,你一定要使用 loadmodule 这个语法来加载,这个模块才有效。

    那么区别就出来了:静态的模块通常是<ifmodule></ifmodule> 来配置, 动态使用loadmoule来加载,然后再配置。

    至于性能方面我没怎么关注, 官方说静态的比动态的在性能方面多5%左右。

    动态相对方便一点, 如果你编译完后,发现有些需要的模块你没编译进去(默认编译多少模块呢?你用./configure –help | grep disable查看, 会让你去disable表示默认会编译进去,否者disable有什么用呢?)你可以动态的加载, 只要你有module.so文件。

    首先看看编译apache的选项含义

    对于apache 1.3.x

        ./configure –prefix=/usr/local/apache –enable-module=so –enable-module=most  –enable-shared=max –enable-module=rewrite

    对于apache 2.0.x

        ./configure –prefix=/usr/local/apache2 –enable-modules=most –enable-mods-shared=all –enable-so –enable-rewrite

    对于apache 2.2.0

        ./configure –prefix=/usr/local/apache2 –enable-mods-shared=all –enable-so –enable-rewrite

    举例一:编译一个apache2.2.8版本

        ./configure –prefix=/usr/local/apache –enable-so –enable-mods-shared=most –enable-rewrite –enable-forward

    说明:

    so模块用来提供 DSO 支持的 apache 核心模块.

    –enable-so 选项:让 Apache 可以支持DSO模式,注意,这里采用的是 Apache2.0 的语法。如果你的Apache 是1.3版本,应改为–enable-module=so

    –enable-mods-shared=most选项:

    告诉编译器将所有标准模块都动态编译为DSO模块。

    如果用的是 Apache1.3, 改为–enable-shared=max就可以。

    –enable-rewrite选项:支持地址重写功能,使用1.3版本的朋友请将它改为–enable-module=rewrite

    –enable-module=most

    用most可以将一些不常用的,不在缺省常用模块中的模块编译进来.

    –enable-mods-shared=all意思是动态加载所有模块,如果去掉-shared话,是静态加载所有模块.

    举例二:

    执行

        ./configure –prefix=/server/apache/ –enable-deflate=shared –enable-headers=shared –enable-rewrite=shared –enable-mods-shared=most

    –enable-mods-shared=all意思是动态加载所有模块,如果去掉-shared话,是静态加载所有模块。

    –enable-mods-shared=most则是动态编译大部分常用的模块,当然,也可以有选择的加载一些模块,most意思是只包含通常用的模块,并且以动态加载模式加载. 记住apache1.xx和apache2.xx的模块编译写法是不一样的.

    下面我来说说上面几种模块的作用:

    deflate模块作用为让服务器实现gzip功能,可以大大降低服务器的带宽消耗。(为什么这么说,我来说给你听,比如一个大小为700KB的网页,但是通过压缩功能,我们把压缩到70KB,然后吧压缩到的70KB传到WEB客户端,实际上这不就是降低带宽的消耗吗?)但是却有个致命的缺点,那是以消耗服务器的CPU,内存资源为代价的。

    注:

    apache1.xx版本中这个模块名叫mod_gzip模块,在apache2.xx中才被deflate模块所替代。

    headers功能如上,跟deflate配套使用。

    rewrite这个模块的作用很重要,防盗链几乎全靠它了。

    为了有什么这么一条,我前面还要加载那3个模块呢,其实也没什么,当时只是担心那3个模块不在“通用”范畴内,所有手动添加了。就加着吧,反正没任何问题。

    这里我来解释下什么叫动态加载和静态加载?

    说简单,并用打比喻的方式来解释。

    好比有两个人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)编译了.

    作者:南非蚂蚁

    注:本文的—prefix里面的符号是两个短杆啊,有Linux基础的童鞋都知道的。这应该是WordPress的Bug,老是把后台的两个短杆在前台显示成一个长杆了

    转载于:https://www.cnblogs.com/xuxyblog/p/4305338.html

    展开全文
  • Apache动态编译安装模块mod_rewrite

    千次阅读 2012-03-22 14:55:58
    如果你的服务器apache还没有安装,那很简单,在编译apache时将mod_rewrite模块编译进去就可以,相关文档可以在[url] www.gbunix.com[/url]中找到。如果你的apache已经安装好了,现在只想编译出mod_rewrite

    转自:http://hi.baidu.com/manmoon/blog/item/40a0b5fd4714851509244d94.html

    如果你的服务器apache还没有安装,那很简单,在编译apache时将mod_rewrite模块编译进去就可以,相关文档可以在[url] www.gbunix.com[/url]中找到。如果你的apache已经安装好了,现在只想编译出mod_rewrite.so模块,在apache 中进行加载,下面我们就介绍这个方法。
    以Solaris操作系统进行举例:

    # PATH=/usr/local/bin:/usr/sfw/bin:/usr/ccs/bin: $PATH
    # export PATH
    # which gcc
    # which make

    # find ./ -name mod_rewrite.c //在apache的安装目录中寻找mod_rewrite.c文件
    # cd PATH/to/mod_rewrite.c //进入包含mod_rewrite.c文件的目录
    # apxs -c mod_rewrite.c //apxs请指定绝对路径,在你当前正在使用apache的bin目录里
    # apxs -i -a -n mod_rewrite mod_rewrite.la

    如果没有什么错误的话,应该在你的apache的modules目录中编译出一个mod_rewrite.so文件。

    编辑httpd.conf文件,确认httpd.conf中已经包含mod_rewrite.so的加载语句,如下:

    LoadModule rewrite_module modules/mod_rewrite.so

    这时,你的apache应该已经支持rewrite了。


    【批注:】

    如果出现module rewrite_module is built-in and can't be loaded这种错误,说明该模块已经内建,不需要再动态加载。

    可以使用 httpd -l 查看有哪些模块已经内建。


    展开全文
  • Apache的核心思想就是模块化,将不同的功能抽成模块,当我们需要某个功能的时候,加载对应的模块就可以了,问题来了,模块我们要如何加载?这里我们就需要讨论Apache动态和静态编译了。  动态编译即在编译的时候...
  • 编译原理实验:词法分析

    万次阅读 多人点赞 2018-09-29 21:17:16
    编译原理实验:词法分析1. 实验题目:词法分析实验目的实验内容实验要求输入输出2. 设计思想3.算法流程4. 源程序5. 调试数据 1. 实验题目:词法分析 实验目的 根据PL/0语言的文法规范,编写PL/0语言的词法分析...
  • 编译原理

    千次阅读 2018-10-19 20:09:10
    进程都需要占用一定内存,被占用的内存有些是事先静态分配和统一回收的,有些是按需动态分配和及时回收的。一般分为5种不同的内存数据段:  代码段:用来存放可执行文件完整的操作指令(机器码)和只读数据,为了...
  • 编译原理第三版课后习题

    万次阅读 多人点赞 2018-12-22 11:12:47
    编译原理课后习题 都是编译原理老师上课布置的课后习题的整理 第二章 1.P34-4 证明G(E)是二义的。 E-&gt;EOE|(E)|v|d O-&gt;+|* 2.P34-8 上下文无关文法G[S] :S-&gt;SS*|SS+|a 答:(1)S=&gt;SS*=...
  • 编译原理编译原理简单介绍

    万次阅读 多人点赞 2017-05-07 13:27:20
    编译原理简单介绍编译原理简单介绍 什么叫编译程序 翻译程序 编译程序 翻译和编译的区别 编译的过程 词法分析 语法分析 语义分析和中间代码的产生 优化 目标代码生成 编译程序的结构 编译程序总框 表格与表格的管理 ...
  • 编译原理书籍推荐

    千次阅读 2018-09-28 13:44:20
    大学课程为什么要开设编译原理呢?这门课程关注的是编译器方面的产生原理和技术问题,似乎和计算机的基础领域不沾边,可是编译原理却一直作为大学本科的必修课程,同时也成为了研究生入学考试的必考内容。编译原理及...
  • 编译原理_第2版_张素琴

    热门讨论 2014-03-16 22:45:41
    编译原理_第2版_张素琴等_清华大学 由张素琴和吕映芝等编著的《编译原理》介绍编译系统的一般构造原 理、基本实现技术和一些自动构造工具。主要由语言基础知识、词法分析 、语法分析、中间代码生成、代码优化、目标...
  • java编译原理

    千次阅读 2018-03-27 16:47:31
    4.Java编译原理1.javac是什么?(1)javac是一种编译器,能够将一种语言规范转换成另一种用语言规范,通常编译器是将便于人们理解的语言规范成机器容易理解的语言规范。(2)javac的任务就是将java源代码语言转换成jvm...
  • Android系统编译原理

    千次阅读 2017-01-20 11:41:31
    Android系统编译原理 [1] 历史  2003年Android公司成立,系统开发  2005年Android被google收购  2007年11月5日,google公司推动成立手机开发联盟(HAL)  2008年9月Android 1.0正式发布,HTC G1使用   ...
  • 编译原理第三版答案

    万次阅读 2018-12-19 21:21:23
    答:编译程序主要由以下几个部分组成:词法分析、语法分析、语义分析、中间代码生成、中间代码优化、目标代码生成、错误处理、表格管理。 2. 实现编译程序的主要方法有哪些? 答:主要有:转换法、移植法、自展法...
  • 编译原理中:短语,直接短语,句柄

    万次阅读 多人点赞 2016-12-13 19:37:55
    这几天邻近期末,感觉上了快一学期的编译原理的许多方面还是难以理解,今天早上就突然遇到了一道题,求短语,直接短语和句柄的题,突然才发现自己连这些词的定义都不清楚,于是仔细查了以下,下面分享出来:短语书上...
  • 编译原理答案 李文生

    热门讨论 2011-03-18 11:04:05
    编译原理答案 李文生版 习题答案 pdf版 官方详细
  • 完整的编译原理实验报告 关于语法、语义和词法分析器三部分的 很全哦 一、实验题目 表达式中间代码生成 二、实验目的 熟悉算术表达式的语法分析与中间代码生成原理。 三、实验内容 1. 构造算术表达式的四元式翻译...
  • 编译原理之代码优化

    万次阅读 多人点赞 2017-12-18 10:43:49
    编译原理出于代码编译的模块化组装考虑,一般会在语义分析的阶段生成平台无关的中间代码,经过中间代码级的代码优化,而后作为输入进入代码生成阶段,产生最终运行机器平台上的目标代码,再经过一次目标代码级别的...
  • Android Apk 编译原理解析

    千次阅读 2017-07-14 09:44:16
    本文基于AOSP-7.1.1-R9源码分析,源码可以参见build/+/android-...对于刚开始接触系统开发的开发者来说,经常会使用如下命令编译apk或者系统固件。source build/envsetup.sh; lunch make -j8 or mmm packages/app/Se
  • 原来编译原理可以这么学

    万次阅读 多人点赞 2012-04-09 00:33:37
    最近对数据结构的研究又有了进展,挺好玩的,总结这些内容的同时,希望也能帮助到大家,这样的话,达到双赢,这才是写博客的目的,接下来我们来轻松学习编译原理,不要被这些纸老虎吓着了。我们一步步来看到底是怎么...
  • 本文主要从教材的选择,实践项目的设置以及实践课程占总评成绩的比例等方面分析和比较了国内外多所高校编译原理课程实践教学的基本情况和特点。根据我院编译原理课程开设的实际情况,提出相应的对策,实现对我院...
  • 编译原理:有穷自动机(DFA与NFA)

    万次阅读 多人点赞 2018-03-01 19:38:25
    我的机器学习教程「美团」算法工程师带你入门机器学习 已经开始更新了,欢迎大家订阅~ 任何关于算法、编程、AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑...
  • 编译原理 总结

    万次阅读 多人点赞 2015-03-26 17:36:07
    一、 编译程序1、 编译器是一种翻译程序,它用于将源语言(即用某种程序设计语言写成的)程序翻译为目标语言(即用二进制数表示的伪机器代码写成的)程序。后者在windows操作系统平台下,其文件的扩展名通常为.obj。...
  • 编译原理入门笔记

    千次阅读 2018-05-24 20:24:37
    什么是编译原理? 编译原理这门课程本来是很多大学必修的一门课程,但是我的本科课程里面并没有安排这门课程,由于研究生需要研究这方面的基础,于是开始自学。相信很多人都知道这门课程是计算机基础课程中比较难...
  • c语言实现编译原理词法分析器

    万次阅读 2017-04-18 20:00:59
    词法分析器 :#include&lt;stdio.h&gt; #include&lt;conio.h&gt; #include&lt;math.h&gt; #include&lt;string.h&gt; #include&lt;stdlib.h&...char m
  • 可以这样入门编译原理

    千次阅读 2013-12-15 15:23:56
    学过编译原理的人都知道,编译原理这门课确实难学。我所看的关于编译原理的书籍有大家所熟悉的紫龙书以及《编译原理实践》,作者都为美国人。因为自己不是计算机专业的,所以没有上过这门课,而自学起来,由于没有一...
  • 编译原理学习(一)--编译以及编译过程

    万次阅读 多人点赞 2018-05-22 21:01:00
    【龙书】编译原理(第二版)学习与理解:1.也许我们这辈子都不会去实现一个编译器,但是我们至少要知道编译器是什么?为什么会需要编译器? ①编译器首先也是一种电脑程序。它会将用某种编程语言写成的源代码(原始...
  • 编译原理:词法分析实验报告

    万次阅读 多人点赞 2019-04-29 15:59:37
    文章目录词法分析实验报告一、实验目的二、实验原理三、实验要求四、实验步骤(利用Java语言来进行词法分析)① 待分析的语言词法② 单词符号对应的种别码③ 词法分析程序流程图④ 编写程序(见源程序代码文件)...
  • 编译原理pdf

    2018-02-28 09:48:00
    下载地址:网盘下载内容简介······本书全面、深入地探讨了编译器设计方面的重要主题,包括词法分析、语法分析、语法制导定义和语法制导翻译、运行时刻环境、目标代码生成、代码优化技术、并行性检测以及过程间...
  • 为什么要学编译原理

    千次阅读 2018-06-23 11:03:11
    这门课程关注的是编译器方面的产生原理和技术问题,似乎和计算机的基础领域不沾边,可是编译原理却一直作为大学本科的必修课程,同时也成为了研究生入学考试的必考内容。编译原理及技术从本质上来讲就是一个算法问题...

空空如也

1 2 3 4 5 ... 20
收藏数 525,416
精华内容 210,166
关键字:

动态编译apache模块