apache的动态编译和静态编译
靜態:
在使用./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的动态编译和静态编译的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于双TMS320C6678+双XC6V
- 下一篇: 生成密码函数