26.4. 安裝、啟動和設定模組

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

Apache 模組可以在建置階段 (Buildtime) 編譯成 Apache 二進位檔案,或是在 Runtime 動態載入。如需了解如何動態載入模組的詳細資訊,請參閱節 26.4.2, "啟用和停用"

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

基本模組

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

延伸模組

一般說來,Apache 軟體套件會包含 (Include) 標示為延伸的模組,但是通常不會使用靜態方式將這些模組編譯到伺服器中。在 SUSE Linux 中,這類模組可以依照共用物件方式,在 Runtime 時載入到 Apache 提供使用。

外部模組

標示為外部的模組不會包含於 Apache 正式發行版本。SUSE Linux 會提供幾種已經可以使用的外部模組。

多重處理模組

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

26.4.1. 模組安裝

如果您已經依照安裝 Apache 的預設方式 (請參閱節 26.1.2, "安裝") 安裝 Apache,它就會安裝所有的基本模組和延伸模組、多重處理模組 Prefork MPM,以及外部模組 PHP5。

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

26.4.2. 啟用和停用

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

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

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

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

26.4.3. 基本和延伸模組

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

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) 時要自動傳遞哪類檔案。它也會提供當目錄要求沒有包含結尾斜線 (Trailing Slash) 時自動重新導向到正確 UR1 的功能。這是預設啟用的模組。

mod_expires

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

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_speling

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

mod_ssl

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

mod_status

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

mod_suexec

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

mod_userdir

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

26.4.4. 多重處理模組

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

26.4.4.1. Prefork MPM

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

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

[Important]本文件的 MPM

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

26.4.4.2. Worker MPM

Worker MPM 會提供多執行緒網頁伺服器。執行緒是"輕量級"的程序。執行緒和程序相比的優點是,它消耗的資源較少。Worker MPM 不只會 Fork 子程序,它還可使用執行緒和伺服器處理程序,來為要求提供服務。完成 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。

26.4.5. 外部模組

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

FastCGI

FastCGI 是一種具有語言獨立、可擴充和開放延伸特性的 CGI,其可在不受伺服器特定 API 限制情況下提供高超效能。FastCGI 應用程式因具備永久特性,所以執行速度相當快。執行這種 CGI 時不會產生依個別要求 (Per-Request) 啟動和初始負荷。

套件名稱:apache2-mod_fastcgi
組態檔案:/etc/apache2/conf.d/mod_fastcgi.conf
更多資訊:/usr/share/doc/packages/apache2-mod_fastcgi
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
mod_ruby

mod_ruby 會將 Ruby 解譯器內嵌到 Apache 網頁伺服器中,允許執行 Ruby CGI 程序檔。在提供 mod_ruby 情形下,這些程序檔啟動的速度比較快。

套件名稱:apache2-mod_ruby
更多資訊:/usr/share/doc/packages/apache2-mod_ruby
mod_jk-ap20

這個模組會提供 Apache 和 Tomcat Servlet Container 之間的連接器。

套件名稱:mod_jk-ap20
更多資訊:/usr/share/doc/packages/mod_jk-ap20

26.4.6. 編譯

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 模組。

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 頁面。