Apache模組動態載入和靜態載入

2021-06-06 23:54:11 字數 3897 閱讀 4848

使用./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...