1. 程式人生 > >apache靜態編譯和動態編譯

apache靜態編譯和動態編譯

Apache擁有4層結構,從核心到外層的module。而外層的module可以用通過靜態和動態兩種方式與Apache共同工作。這也就引入下文的“動態”和“靜態”兩種編譯安裝方式:

靜態編譯:  編譯的時候,所有的模組自己編譯進 httpd 這個檔案中 ,啟動Apache的時候這些模組就已經載入進來了,可以直接來使用,而不用再 httpd.conf 中在 LoadModule 來載入,只要在 <ifmodule></ifmodule> 中來配置就可以了。

動態編譯:

編譯的時候,使用enable-MODULE=shared 或者enable-mods-shared=MODULE

來動態編譯。 動態顯然就不編譯到httpd裡面去了,啟動的時候根本不會載入這個模組, 而是給你一個module.so 檔案。你想用,就在httpd.conf中使用 loadmodule 這個語法來載入,這個模組才有效。

區別是:  靜態的模組通常在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