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

2021-08-31 12:39:11 字數 3517 閱讀 7691

這裡我來解釋下什麼叫動態載入和靜態載入?

說簡單,並用打比喻的方式來解釋.

好比有兩個人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)編譯了

靜態:在使用./configure編譯的時候,如果不指定某個模組為動態,即沒有使用:enable-mods-shared=module或者enable-module=shared 這個2個中的乙個,那麼所有的預設模組為靜態。 那麼何謂靜態? 其實就是編譯的時候所有的模組自己編譯進 httpd 這個檔案中(我們啟動可以使用這個執行檔案,如: ./httpd & ) ,啟動的時候這些模組就已經載入進來了,也就是可以使用了, 通常為: 來配置。所以大家看到的配置都是 ,很顯然,module.c這個東西已經存在 httpd這個檔案中了。

動態:就是編譯的時候,使用enable-module=shared 或者enable-modules-shared=module 來動態編譯。 那麼什麼是動態? 靜態是直接編譯進httpd中, 那麼動態顯然就不編譯進去了,也就是你啟動的時候根本不會載入這個模組, 而是給你乙個module.so 檔案,你一定要使用 loadmodule 這個語法來載入,這個模組才有效。

那麼區別就出來了:靜態的模組通常是 來配置, 動態使用loadmoule來載入,然後再配置。

首先看看編譯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的模組編譯寫法是不一樣的.

如已經安裝好,到modules目錄下,檢視裡面是否有一些.so檔案,以此為副檔名的檔案為模組檔案。表明系統已經載入了模組,並且是動態方式載入的。如果modules目錄下沒有這些.so檔案,表明系統沒有動態載入模組。 然後我們就點看看系統有沒有通過靜態方式載入一些模組,通過命令:apachectl -l 會列出系統已經載入的模組,且為靜態方式載入的模組。

4。靜態載入的模組不會顯示在modules目錄下,靜態載入模組內嵌在系統裡,如果想解除安裝該模組,apache需要重新進行編譯安裝。 靜態載入的方法是配置時指定啟動哪些模組,語法是:./configure --enable-deflate --prefix=/opt/http2 make make install ./bin/apachectl restart

5。動態載入的模組都會顯示在modules目錄下,要想讓這些模組起作用,還需要在主配置檔案裡裝載目錄下的這些模組,語法是:loadmodule deflate_module modules/mod_deflate.so

6。模組載入後,要想讓模組起作用,需要在配置檔案裡新增相應的配置資訊,具體配置資訊可參考apache手冊中關於模組配置部分。

7。要想讓模組起作用,無論是通過靜態方式載入的模組,還是通過動態方式載入的模組,都需要在配置檔案裡新增相應配置資訊。 區別是如下語法,動態載入的模組,在配置檔案中只需要輸入......裡面的內容,但要是靜態載入的模組,在配置檔案中要保那對標記也寫進配置檔案。

startservers 8

minspareservers 5

maxspareservers 20

serverlimit 256

maxclients 256

maxrequestsperchild 4000

8。 配置資訊可以直接在主配置檔案(httpd.conf)中進行新增,也可以在子配置檔案中進行新增;不同的是如果配置資訊寫在子配置檔案中,在主配置檔案裡還需要加一條語句,宣告主配置檔案包括子配置資訊,語法是:include conf.d/*.conf (宣告主配置檔案包括conf.d目錄中的所有子配置檔案裡的資訊)

9。 重啟apache服務, 語法是./bin/apachectl restart

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

在 使用.configure 編譯的時候,如果不指定某個模組為動態,即沒有使用 enable mods shared module 或者enable module shared這個2 個中的乙個,那麼所有的預設模組為靜態。那麼何謂靜態?其實就是編譯的時候所有的模組自己編譯進 這個檔案中 我們啟動可以...

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...