Apache 軟體屬於模組化設計:除了部分核心任務,其餘所有功能皆由模組處理。這種進步幅度很大,甚至連 HTTP 都是由模組 (http_core) 處理。
Apache 模組可以在建立階段編譯成 Apache 二進位檔案,或是在執行階段動態載入。如需瞭解如何動態載入模組的詳細資訊,請參閱第 27.4.2 節「啟用和停用」。
Apache 模組可以分成四種不同類別:
基本模組會依預設編譯到 Apache。SUSE Linux Enterprise Server 中的 Apache 僅編譯了 mod_so (用於載入其他模組) 與 http_core。所有其他模組均以共享物件的方式提供,即在執行期間加入,而不包含在伺服器二進位檔案中。
一般說來,Apache 軟體套件會包含標示為延伸的模組,但是通常不會使用靜態方式將這些模組編譯到伺服器中。在 SUSE Linux Enterprise Server 中,這類模組以共享物件方式提供,並可在執行時期載入到 Apache 中。
標示為外部的模組不會包含於 Apache 正式發行版本中。SUSE Linux Enterprise Server 提供了幾種可以立即使用的外部模組。
MPM 會負責接收和處理網頁伺服器所收到的要求,因此屬於網頁伺服器軟體的核心部分。
如果您已經依照安裝 Apache 的預設方式 (請參閱第 27.1.2 節「安裝」) 安裝 Apache,則所有的基礎模組和延伸模組、多重處理模組 Prefork MPM,以及外部模組 mod_php5 和 mod_python 都會隨之安裝。
您可以啟動 YaST 並依序選擇+,以安裝其他外部模組。現在,請依序選擇+,然後搜尋 apache。結果清單中除其他套件之外,還會包含所有可用的外部 Apache 模組。
使用 YaST 時,您可以利用第 27.2.2.1 節「HTTP 伺服器精靈」 中說明的模組組態來啟用或停用程序檔語言模組 (PHP5、Perl 及 Python)。所有其他模組都可以依據第 27.2.2.2.2 節「伺服器模組」說明步驟來啟用或停用。
如果您偏好手動啟用或停用模組,請分別使用 a2enmod mod_foo 或 a2dismod mod_foo 指令。a2enmod -l 會輸出目前所有的使用中模組清單。
![]() | 包含外部模組的組態檔案 |
|---|---|
如果您已經手動啟用外部模組,請確定將其組態檔案載入至所有的虛擬主機組態。外部模組的組態檔案會存放在 | |
Apache 說明文件中詳細介紹了所有的基本模組和延伸模組。本文件只提供最重要模組的概要說明。如需關於每個模組的詳細資訊,請參閱 http://httpd.apache.org/docs/2.2/mod/。
提供在需要特定 MIME 類型 (例如 application/pdf)、具有特定副檔名的檔案 (例如 .rpm) 或特定要求方法 (例如 GET) 時執行程序檔的方法。這是預設啟用的模組。
提供 Alias 和 Redirect 指示詞,供您用來將 URL 映射至特定目錄 (Alias) 或將所要求的 URL 重新導向至其他位置。這是預設啟用的模組。
驗證模組可提供不同的驗證方式:使用 mod_auth_basic 的基本驗證,或是使用 mod_auth_digest 的摘要驗證。Apache 2.2 的摘要驗證方式仍屬實驗性質。
mod_auth_basic 和 mod_auth_digest 必須與驗證提供者模組 mod_authn_* (例如適用於以文字檔案為基礎之驗證的 mod_authn_file) 以及驗證模組 mod_authz_* (例如適用於使用者驗證的 mod_authz_user) 結合。
如需更多有關此主題的詳細資訊,請參閱 http://httpd.apache.org/docs/2.2/howto/auth.html 的 「驗證 HOWTO」。
Autoindex 會在沒有任何索引檔案 (例如,index.html) 出現時產生目錄清單。這些索引的外觀可加以設定。這是預設啟用的模組。然而,目錄清單預設由 Options 指示詞停用 — 這會覆寫虛擬主機組態的此項設定。這個模組的預設組態檔案會存放在 /etc/apache2/mod_autoindex-defaults.conf。
執行 CGI 程序檔時必須使用 mod_cgi。這是預設啟用的模組。
使用這個模組時,Apache 可以設定成即時壓縮成指定檔案類型之後,再進行傳送。
mod_dir 可提供 DirectoryIndex 指示詞,供您用來設定當要求目錄 (預設是 index.html) 時要自動傳遞哪類檔案。它也會提供當目錄要求沒有包含末尾斜線時自動重新導向到正確 URL 的功能。這是預設啟用的模組。
控制傳遞給 CGI 程序檔或 SSI 頁面的環境。可以在呼叫 httpd 程序的外圍程序中設定、取消設定或傳遞環境變數。這是預設啟用的模組。
使用 mod_expires 時,您可以傳送 Expires 標頭,控制代理和瀏覽器快取記憶體重新整理文件的頻率。這是預設啟用的模組。
mod_include 可讓您使用 Server Side Include (SSI),這項工具會提供動態產生 HTML 頁面的基本功能。這是預設啟用的模組。
可透過 http://localhost/server-info/ 提供伺服器組態的綜合綜覽。基於安全性考量,您應該永遠限制這個 URL 的存取權限。依預設,只有 localhost 允許存取這個 URL。mod_info 會在 /etc/apache2/mod_info.conf 完成設定。
使用此模組時,您可以設定 Apache 記錄檔案的外觀。這是預設啟用的模組。
此 mime 模組會依據傳送檔案的副檔名,來確定其是否包含正確的 MIME 標頭 (例如 HTML 文件為 text/html)。這是預設啟用的模組。
內容協商 (Content Negotiation) 所需的模組。如需更多詳細資訊,請參閱 http://httpd.apache.org/docs/2.2/content-negotiation.html。這是預設啟用的模組。
可提供 mod_alias 的功能,但是具備更多功能和使用彈性。使用 mod_rewrite 時,您可以依據多重的規則、要求標頭和其他條件來重新導向 URL。
根據用戶端的要求設定環境變數,如用戶端傳送的瀏覽器字串或用戶端的 IP 位址。這是預設啟用的模組。
mod_speling 會嘗試自動修正 URL 中出現的打字錯誤,例如大小寫錯誤。
啟用網頁伺服器和用戶端之間的加密連線。如需詳細資料,請參閱 第 27.6 節「設定提供 SSL 的安全網頁伺服器」。這是預設啟用的模組。
可透過 http://localhost/server-status/ 提供有關伺服器活動及效能的資訊。基於安全性考量,您應該永遠限制這個 URL 的存取權限。依預設,只有 localhost 允許存取這個 URI。mod_status 會在 /etc/apache2/mod_status.conf 完成設定。
mod_suexec 可讓您以不同使用者和群組身分來執行 CGI 程序檔。這是預設啟用的模組。
啟用在 ~ 之下提供使用者特定目錄。在組態中必須指定 user/UserDir 指示詞。這是預設啟用的模組。
SUSE Linux Enterprise Server 提供了兩種不同的多處理模組 (MPM) 搭配 Apache 使用。
Prefork MPM 會實作未產生執行緒、正在進行 Prefork 的網頁伺服器。這個模組會使得網頁伺服器產生類似 Apache 版本 1.x 的行為,也就是透過衍生出獨立的子處理程序,將每個要求獨立分開並加以處理。這樣發生問題的要求就不會影響其他要求,進而避免網頁伺服器出現鎖定現象。
雖然透過這種以處理程序為主的方法可以提供穩定性,但是比起 Worker MPM,Prefork MPM 會耗用較多的系統資源。Unix 作業系統會將 Prefork MPM 當作預設 MPM。
![]() | 本文件的 MPM |
|---|---|
本文件會假設 Apache 是使用 Prefork MPM。 | |
Worker MPM 會提供多執行緒網頁伺服器。執行緒是「輕量級」的處理程序。執行緒和處理程序相比的優點是,它消耗的資源較少。Worker MPM 不只會衍生子處理程序,它還可使用執行緒和伺服器處理程序,來為要求提供服務。完成 Prefork 的子處理程序屬於多執行緒。這種方法因為耗用比 Prefork MPM 更少的系統資源,因此可以提高 Apache 的執行效能。
一個主要缺點就是 Worker MPM 的穩定性:當某執行緒毀損時,處理程序的所有執行緒都會受到影響。最嚴重的情況下,甚至還會造成伺服器當機。尤其是在負載量高的 Apache 上使用通用閘道介面 (CGI) 時,可能就會因線串無法與系統資源進行通訊而產生內部伺服器錯誤。在 Apache 上使用 worker MPM 的另外一點爭議,就是並非所有可用的 Apache 模組都能安全地使用執行緒,這樣就無法配合 worker MPM 使用。
![]() | 搭配 MPM 使用 PHP 模組 |
|---|---|
並非所有可用的 PHP 模組都是安全執行緒。因此最好不要搭配 worker MPM 來使用 mod_php。 | |
此處提供了 SUSE Linux Enterprise Server 隨附的所有外部模組清單。在列出目錄中找出模組的說明文件。
為 Apache 新增支援,給由模組 (如 mod_php5 和 mod_perl) 處理的個別 CGI 程序檔提供 Novell AppArmor 限制。
套件名稱:apache2-mod_apparmor |
| 詳細資訊︰第 IV 部分「Confining Privileges with Novell AppArmor」 (↑Security Guide) |
使用 mod_mono 可讓您在伺服器中執行 ASP.NET 頁面。
套件名稱︰apache2-mod_mono |
組態檔案︰/etc/apache2/conf.d/mod_mono.conf |
mod_perl 可讓您使用內嵌解譯器來執行 Perl 程序檔。內嵌在伺服器的常駐解譯器可以避免因啟動外部解譯器造成的負荷,以及在 Perl 啟動階段時降低速度。
套件名稱︰apache2-mod_perl |
組態檔案︰/etc/apache2/conf.d/mod_perl.conf |
詳細資訊︰/usr/share/doc/packages/apache2-mod_perl |
PHP 是一種伺服器端、跨平台式的 HTML 內嵌程序檔語言。
套件名稱︰apache2-mod_php5 |
組態檔案︰/etc/apache2/conf.d/php5.conf |
詳細資訊︰/usr/share/doc/packages/apache2-mod_php5 |
mod_python 允許在 Apache HTTP 伺服器中內嵌 Python,以便大幅提高效能和增加網頁應用程式的設計彈性。
套件名稱︰apache2-mod_python |
詳細資訊︰/usr/share/doc/packages/apache2-mod_python |
Apache 允許進階使用者編寫自定模組進行延伸。若要開發 Apache 模組或編譯協力廠商模組,除了相對應開發工具外,還需要套件 apache2-devel。apache2-devel 也包含了 apxs2 工具,這是在編譯 Apache 其他模組時,需要用到的工具。
apxs2 可以從原始程式碼進行模組編譯和安裝 (其中包括必要的組態檔案變更),並建立可於 Runtime 載入 Apache 的動態共享物件 (DSO)。
apxs2 二進位檔案位在 /usr/sbin 下方:
/usr/sbin/apxs2 — 適合用來建立可配合任何 MPM 使用的延伸模組。安裝位置是 /usr/lib/apache2。
/usr/sbin/apxs2-prefork — 適合用於 Prefork MPM 模組。安裝位置是 /usr/lib/apache2-prefork。
/usr/sbin/apxs2-worker — 適用於 Worker MPM 模組。安裝位置是 /usr/lib/apache2-worker。
使用 cd /path/to/module/source; apxs2 -cia mod_foo.c 指令從原始程式碼來安裝和啟用模組 (-c 負責編譯模組、-i 負責安裝,而 -a 負責啟用)。如需有關 apxs2 的其他選項資訊,請參閱 apxs2(1) man 頁面。