apache的動態編譯和靜態編譯

來源:互聯網
上載者:User

標籤:

靜態:

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

動態:

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

那麼區別就出來了:靜態模組通常是<ifmodule></ifmodule> 來配置, 動態使用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 –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的模組編譯寫法是不一樣的.

下面我來說說上面幾種模組的作用:

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)編譯了.

南非螞蟻

註:本文的—prefix裡面的符號是兩個短杆啊,有Linux基礎的童鞋都知道的。這應該是WordPress的Bug,老是把背景兩個短杆在前台顯示成一個長杆了

apache的動態編譯和靜態編譯

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.