安裝、啟用和設定模組

Apache 軟體屬於模組化設計:除了部分核心任務,其餘所有功能皆由模組處理。這種進步幅度很大,甚至連 HTTP 都是由模組 (http_core) 處理。

Apache 模組可以在建立階段編譯成 Apache 二進位檔案,或是在執行階段動態載入。如需了解如何動態載入模組的詳細資訊,請參閱第 40.4.2 節「啟用和停用」

Apache 模組可以分成四種不同類別:

基本模組

基本模組會依預設編譯到 Apache。SUSE Linux 中的 Apache 只有編譯 mod_so (必須載入其他模組) 和 http_core。所有其他模組都可透過共享物件方式提供:這些模組會在 Runtime 時進行包含 (Include),而不用包含至伺服器二進位檔案本身。

延伸模組

一般說來,Apache 軟體套件會包含標示為延伸的模組,但是通常不會使用靜態方式將這些模組編譯到伺服器中。在 SUSE Linux Enterprise Server 中,這類模組以共享物件方式提供,並可在執行階段載入到 Apache。

外部模組

標示為外部的模組不會包含於 Apache 正式發行版本中。SUSE Linux Enterprise Server 提供了幾種可以立即使用的外部模組。

多重處理模組

MPM 會負責接收和處理網頁伺服器所收到的要求,因此屬於網頁伺服器軟體的核心部分。

模組安裝

如果您已經依照安裝 Apache 的預設方式 (請參閱第 40.1.2 節「安裝」) 安裝 Apache,則所有的基礎模組和延伸模組、多重處理模組 Prefork MPM,以及外部模組 mod_php5 和 mod_python 都會隨之安裝。

您可以啟動 YaST 並依序選擇軟體+軟體管理,以安裝其他外部模組。現在,請依序選擇過濾器+搜尋,然後搜尋 apache。在其他套件之中,此結果清單會包含所有可用的外部 Apache 模組。

啟用和停用

使用 YaST 時,您可以使用第 40.2.2.1 節「HTTP 伺服器精靈」說明的模組組態來啟用或停用程序檔語言模組 (PHP5、Perl、Python)。所有其他模組都可以依據第 40.2.2.2.2 節「伺服器模組」說明步驟來啟用或停用。

如果您偏好手動啟用或停用模組,請分別使用 a2enmod mod_fooa2dismod mod_foo 指令。a2enmod -l 會輸出目前所有的使用中模組清單。

[Important]包含外部模組的組態檔案

如果您已經手動啟用外部模組,請確定將其組態檔案載入至所有的虛擬主機組態。外部模組的組態檔案會存放在 /etc/apache2/conf.d/ 之下,而且不會預設載入。如果您需要在每個虛擬主機上載入相同模組,您可以含入此目錄中的 *.conf。另一種做法是含入個別檔案。如需取得範例說明,請參閱/etc/apache2/vhost.d/vhost.template

基本和延伸模組

Apache 說明文件中詳細介紹了所有的基本模組和延伸模組。本文件只提供最重要模組的概要說明。如需關於每個模組的詳細資訊,請參閱 http://httpd.apache.org/docs/2.2/mod/

mod_actions

提供在需要特定 MIME 類型 (例如 application/pdf)、具有特定副檔名的檔案 (例如 .rpm) 或特定要求方法 (例如 GET) 時執行程序檔的方法。這是預設啟用的模組。

mod_alias

提供 AliasRedirect 指示詞,供您用來將 URL 映射至特定目錄 (Alias) 或將所要求的 URL 重新導向至其他位置。這是預設啟用的模組。

mod_auth*

驗證模組可提供不同的驗證方式:使用 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」。

mod_autoindex

Autoindex 會在沒有任何索引檔案 (例如,index.html) 出現時產生目錄清單。這些索引的外觀可加以設定。這是預設啟用的模組。然而,目錄清單預設由 Options 指示詞停用 — 這會覆寫虛擬主機組態的此項設定。這個模組的預設組態檔案會存放在 /etc/apache2/mod_autoindex-defaults.conf

mod_cgi

執行 CGI 程序檔時必須使用 mod_cgi。這是預設啟用的模組。

mod_deflate

使用這個模組時,Apache 可以設定成即時壓縮成指定檔案類型之後,再進行傳送。

mod_dir

mod_dir 可提供 DirectoryIndex 指示詞,供您用來設定當要求目錄 (預設是 index.html) 時要自動傳遞哪類檔案。它也會提供當目錄要求沒有包含末尾斜線時自動重新導向到正確 URL 的功能。這是預設啟用的模組。

mod_env

控制傳遞給 CGI 程序檔或 SSI 頁面的環境。可以在呼叫 httpd 程序的外圍程序中設定、取消設定或傳遞環境變數。這是預設啟用的模組。

mod_expires

使用 mod_expires 時,您可以傳送 Expires 標頭,控制代理和瀏覽器快取記憶體重新整理文件的頻率。這是預設啟用的模組。

mod_include

mod_include 可讓您使用 Server Side Include (SSI),這項工具會提供動態產生 HTML 頁面的基本功能。這是預設啟用的模組。

mod_info

可透過 http://localhost/server-info/ 提供伺服器組態的綜合綜覽。基於安全性考量,您應該永遠限制這個 URL 的存取權限。依預設,只有 localhost 允許存取這個 URL。mod_info 會在 /etc/apache2/mod_info.conf 完成設定。

mod_log_config

使用這個模組時,您可以設定 Apache 記錄檔案的外觀。這是預設啟用的模組。

mod_mime

此 MIME 模組會依據傳送檔案的副檔名來檢查其是否包含正確的 MIME 標頭 (例如 HTML 文件應為 text/html)。這是預設啟用的模組。

mod_negotiation

內容協商 (Content Negotiation) 所需的模組。如需更多詳細資訊,請參閱 http://httpd.apache.org/docs/2.2/content-negotiation.html。這是預設啟用的模組。

mod_rewrite

可提供 mod_alias 的功能,但是具備更多功能和使用彈性。使用 mod_rewrite 時,您可以依據多重的規則、要求標頭和其他條件來重新導向 URL。

mod_setenvif

根據用戶端的要求設定環境變數,如用戶端傳送的瀏覽器字串或用戶端的 IP 位址。這是預設啟用的模組。

mod_speling

mod_speling 會嘗試自動修正 URL 中出現的打字錯誤,例如大小寫錯誤。

mod_ssl

啟用網頁伺服器和用戶端之間的加密連線。如需詳細資料,請參閱 第 40.6 節「設定提供 SSL 的安全網頁伺服器」。這是預設啟用的模組。

mod_status

可透過 http://localhost/server-status/ 提供有關伺服器活動及效能的資訊。基於安全性考量,您應該永遠限制這個 URL 的存取權限。依預設,只有 localhost 允許存取這個 URI。mod_status 會在 /etc/apache2/mod_status.conf 完成設定。

mod_suexec

mod_suexec 可讓您以不同使用者和群組身份來執行 CGI 程序檔。這是預設啟用的模組。

mod_userdir

啟用在 ~user/ 之下提供使用者特定目錄。在組態中必須指定 UserDir 指示詞。這是預設啟用的模組。

多重處理模組

SUSE Linux Enterprise Server 提供了兩種不同的多重處理模組 (MPM) 搭配 Apache 使用。

Prefork MPM

Prefork MPM 會實作未產生執行緒、正在進行 Prefork 的網頁伺服器。這個模組會使得網頁伺服器產生類似 Apache 版本 1.x 的行為,也就是透過衍生出獨立的子處理程序,將每個要求獨立分開並加以處理。這樣發生問題的要求就不會影響其他要求,進而避免網頁伺服器出現鎖定現象。

雖然透過這種以處理程序為主的方法可以提供穩定性,但是比起 Worker MPM,Prefork MPM 會耗用較多的系統資源。Unix 作業系統會將 Prefork MPM 當作預設 MPM。

[Important]本文件的 MPM

本文件會假設 Apache 是使用 Prefork MPM。

Worker MPM

Worker MPM 會提供多執行緒網頁伺服器。執行緒是「輕量級」的處理程序。執行緒和處理程序相比的優點是,它消耗的資源較少。Worker MPM 不只會衍生子處理程序,它還可使用執行緒和伺服器處理程序,來為要求提供服務。完成 Prefork 的子處理程序屬於多執行緒。這種方法因為耗用比 Prefork MPM 更少的系統資源,因此可以提高 Apache 的執行效能。

一個主要缺點就是 Worker MPM 的穩定性:當某執行緒毀損時,處理程序的所有執行緒都會受到影響。最嚴重的情況下,甚至還會造成伺服器當機。尤其是在負載量高的 Apache 上使用通用閘道介面 (Common Gateway Interface, CGI) 時,可能就會因執行緒無法與系統資源進行通訊而產生內部伺服器錯誤。在 Apache 上使用 worker MPM 的另外一點爭議,就是並非所有可用的 Apache 模組都能安全地使用執行緒,這樣就無法配合 worker MPM 使用。

[Warning]搭配 MPM 使用 PHP 模組

並非所有可用的 PHP 模組都是安全執行緒。因此最好不要搭配 worker MPM 來使用 mod_php。

外部模組

在此處尋找 SUSE Linux Enterprise Server 隨附的所有外部模組清單。在列出目錄中找出模組的說明文件。

mod-apparmor

為 Apache 新增支援,給由模組 (如 mod_php5 和 mod_perl) 處理的個別 CGI 程序檔提供 Novell AppArmor 限制。

套件名稱:apache2-mod_apparmor
詳細資訊︰Novell AppArmor Administration Guide (↑Novell AppArmor Administration Guide)
mod_perl

mod_perl 可讓您使用內嵌解譯器來執行 Perl 程序檔。內嵌在伺服器的常駐解譯器可以避免因啟動外部解譯器造成的負荷,以及在 Perl 啟動階段時降低速度。

套件名稱︰apache2-mod_perl
組態檔案︰/etc/apache2/conf.d/mod_perl.conf
詳細資訊︰/usr/share/doc/packages/apache2-mod_perl
mod_php5

PHP 是一種伺服器端、跨平台式的 HTML 內嵌程序檔語言。

套件名稱︰apache2-mod_php5
組態檔案︰/etc/apache2/conf.d/php5.conf
詳細資訊︰/usr/share/doc/packages/apache2-mod_php5
mod_python

mod_python 允許在 Apache HTTP 伺服器中內嵌 Python,以便大幅提高效能和增加網頁應用程式的設計彈性。

套件名稱︰apache2-mod_python
詳細資訊︰/usr/share/doc/packages/apache2-mod_python

編譯

Apache 允許進階使用者編寫自定模組進行延伸。若要開發 Apache 模組或編譯協力廠商模組,除了相對應開發工具外,還需要套件 apache2-develapache2-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 模組。

apxs2 會安裝可供所有 MPM 使用的模組。其他兩個程式會安裝模組,使它們只可以用於各自的 MPM。apxs2 會將模組安裝到 /usr/lib/apache2,而 apxs2-preforkapxs2-worker 會將模組安裝到 /usr/lib/apache2-prefork/usr/lib/apache2-worker 中。

使用 cd /path/to/module/source; apxs2 -cia mod_foo.c 指令從原始程式碼來安裝和啟用模組 (-c 負責編譯模組、-i 負責安裝,而 -a 負責啟用)。如需有關 apxs2 的其他選項資訊,請參閱 apxs2(1) man 頁面。