apache靜態編譯和動態編譯
Apache擁有4層結構,從核心到外層的module。而外層的module可以用通過靜態和動態兩種方式與Apache共同工作。這也就引入下文的“動態”和“靜態”兩種編譯安裝方式:
靜態編譯: 編譯的時候,所有的模組自己編譯進 httpd 這個檔案中 ,啟動Apache的時候這些模組就已經載入進來了,可以直接來使用,而不用再 httpd.conf 中在 LoadModule 來載入,只要在 <ifmodule></ifmodule> 中來配置就可以了。
動態編譯:
編譯的時候,使用enable-MODULE=shared 或者enable-mods-shared=MODULE
區別是: 靜態的模組通常在http.conf中用<ifmodule></ifmodule> 來配置,動態的要先loadmoule來載入,然後再<ifmodule></ifmodule>配置。 官方說靜態的比動態的在效能方面多5%左右。 相對來說,靜態的效率高些,而動態方式配置方面靈活。想想如果編譯進去的C這個module你想升級或者去掉,靜態方式的就只能重新編譯Apache了。 下面這句在Apache原始檔夾下執行,可以檢視預設情況下Apache都給你裝了那些module進去:
./configure –help | grep disable
讓Apache日後可以動態編譯和載入模組:
如果想讓Apache日後可以支援動態編譯(DSO)更多的module,需要在初次安裝時把so這個模組編譯到核心(即,靜態編譯)。
如果編譯中包含任何DSO模組,則mod_so會被自動包含進核心。如果希望核心以後能夠裝載DSO,但不實際編譯任何DSO模組,則需明確指定:
針對apache1.x: --enable-module=so
針對apache2.x: --enable-so=static
Apache模組的型別: 基本(B)模組預設包含,必須明確禁用; 擴充套件(E)/實驗(X)模組預設不包含,必須明確啟用。 那麼,針對以上這些型別的模組,有以下幾種操作方式--disable-MODULE
禁用MODULE模組(僅用於基本模組)
--enable-MODULE=shared
將MODULE編譯為DSO(可用於所有模組)
--enable-MODULE=static
將MODULE靜態連線進核心(僅用於擴充套件和實驗模組)
--enable-mods-shared=MODULE-LIST
將MODULE-LIST中的所有模組都編譯成DSO(可用於所有模組)
--enable-modules=MODULE-LIST
將MODULE-LIST靜態連線進核心(可用於所有模組)
針對--enable-modules和--enable-mods-shared有兩個懶辦法就是 most引數和all引數,分別表示“很多的”和“所有”。
例如:
mod_alias是個基本模組,不想安裝的話就:
--disable-alias
mod_rewrite是個擴充套件模組,想動態載入它:--enable-rewrite=shared
想靜態載入就是:--enable-rewrite=static
想靜態編譯mod_alias和mod_rewrite:--enable-modules='alias rewrite'
想動態編譯mod_alias和mod_rewrite:--enable-mods-shared='alias rewrite'
最大化靜態安裝Apache:
.
/configure
--prefix=
/usr/local/apache
--
enable
-modules=all
最大化動態安裝Apache:
.
/configure
--prefix=
/usr/local/apache
--
enable
-mods-shared=all
靜態安裝rewrite、動態安裝deflate以及headers
.
/configure
--prefix=
/usr/local/apache
--
enable
-rewrite=static --
enable
-deflate=shared --
enable
-headers=shared
不安裝基本的alais,保留以後的擴充套件DSO能力:
.
/configure
--prefix=
/usr/local/apache
--
enable
-so=static --disable-
alias
轉載http://www.cnblogs.com/52php/p/5668845.html