在
使用./configure
編譯的時候,如果不指定某個模組為動態,即沒有使用:
enable-mods-shared=module
或者enable-module=shared這個2
個中的乙個,那麼所有的預設模組為靜態。
那麼何謂靜態?
其實就是編譯的時候所有的模組自己編譯進
這個檔案中(我們啟動可以使用這個執行檔案,如:
),啟動的時候這些模組就已經載入進來了,也就是可以使用了,
通常為:
來配置。所以大家看到的配置都是
,很顯然,
module.c
這個東西已經存在
這個檔案中了。
動態:就是編譯的時候,使用
enable-module=shared
或者enable-modules-shared=module
來動態編譯。
那麼什麼是動態?
靜態是直接編譯進
中,那麼動態顯然就不編譯進去了,也就是你啟動的時候根本不會載入這個模組,
而是給你乙個
module.so
檔案,你一定要使用
loadmodule
這個語法來載入,這個模組才有效。
那麼區別就出來了:靜態的模組通常是
來配置,
動態使用
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 /
對於apache 2.0.x
./configure --prefix=/usr/local/apache2/
--enable-modules=most /
--enable-mods-shared=all /
--enable-so /
--enable-rewrite
對於apache2.2.0
./configure --prefix=/usr/local/apache2 /
--enable-mods-shared=all /
--enable-so /
--enable-rewrite
--enable-module=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)
編譯了.
Apache模組動態載入和靜態載入
這裡我來解釋下什麼叫動態載入和靜態載入?說簡單,並用打比喻的方式來解釋.好比有兩個人a和m a代表apache,m代表module 要想讓a使用m的東西 乙個方法是把m的東西都放到a那裡去,a使用的時候就是現成的了 就是所謂的靜態編譯 還有乙個方法,就是告訴a,m的住址,當a要使用m的東西的時候,a...
apache動態編譯和靜態編譯區別
apache的動態和靜態編譯區別 一 含義 動態意味著不用此模組的時候就不需要load進來,使用的時候需要顯示的load進來 靜態意味著先把模組load進來,想用的時候直接使用.二 編譯 靜態編譯 當只需要靜態編譯module的時候,語法應寫成 enable ssl或 enable ssl stat...
動態庫的動態載入和靜態載入 Linux環境
gcc fpic c math.c o math.o 自行編寫他們的標頭檔案放在同一目錄下 gcc fpic c show.c o show.o gcc shared math.o show.o o libmath.so 為動態庫,lib 其中 為動態庫的名字export ld library pa...