Apache HTTP Server 2.4 版
本文件描述多處理器模組為為何物,以及 Apache HTTP Server 如何使用它們。
Apache HTTP Server 的設計宗旨為功能強大且靈活的網頁伺服器,能夠在各種不同環境的眾多平台上運作。不同的平台和環境往往需要不同的功能,或者可能有最有效率的不同實作方式。Apache httpd 一向透過其模組化設計,來適應各種環境。此種設計讓網頁管理員能藉由在編譯時或在執行時選擇載入哪些模組的方式,來決定哪些功能要納入伺服器中。
Apache HTTP Server 2.0 將此模組化設計延伸到網頁伺服器的最基本功能。伺服器附帶有多個多處理器模組 (MPM),它們負責在機器上繫結到網路埠,接受要求並分派子行程來處理要求。
將模組化設計延伸到這個伺服器層級,具有兩個重要的優點
mpm_winnt
模組可以使用原生的網路功能來取代 Apache httpd 1.3 使用的 POSIX 層。其他實作特殊 MPM 的作業系統也享有此優點。worker
或 event
,而需要穩定性或與較舊軟體相容的站點可以使用 prefork
。在使用者層級,MPM 看起來很像其他 Apache httpd 模組。主要差異是 MPM 每次只能載入伺服器一個。可用 MPM 的清單顯示在 模組索引網頁 上。
下表列出各種作業系統的預設 MPM。如果您在編譯時沒有做出其他選擇,這將是選取的 MPM。
Netware | mpm_netware |
OS/2 | mpmt_os2 |
Unix | prefork 、worker 或 event ,取決於平台功能 |
Windows | mpm_winnt |
在此,「Unix」用於表示類 Unix 作業系統,例如 Linux、BSD、Solaris、Mac OS X 等。
對於 Unix,安裝哪個 MPM 的決定取決於兩個問題
1. 系統是否支援線程?
2. 系統是否支援執行緒安全輪詢(特別是 kqueue 和 epoll 函數)?
如果兩個問題的答案為「是」,預設的 MPM 是 event
。
如果 #1 的答案為「是」,但 #2 的答案為「否」,預設值將是 worker
。
如果兩個問題的答案都是「否」,則預設的 MPM 將是 prefork
。
實際上,這表示預設值幾乎總是會是 event
,因為所有現代作業系統都支援這兩個功能。
MPM 可以建立為所有平台的靜態模組。在建立期間選擇一個 MPM 並連結至伺服器中。為了變更 MPM,必須重新建立伺服器。
要覆寫預設 MPM 選項,請使用 configure
腳本的 --with-mpm=NAME
選項。NAME 是所需 MPM 的名稱。
編譯完伺服器後,可以使用 ./httpd -l
來確定選取哪個 MPM。此命令將列出已編譯到伺服器中的每個模組,包括 MPM。
在 Unix 及類似平台上,MPM 可以作為 DSO 模組建構,並以與其他 DSO 模組相同的方式動態載入到伺服器。將 MPM 建構為 DSO 模組,可透過更新 MPM 的 LoadModule
指令,而不是重新建構伺服器,來變更 MPM。
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
嘗試 LoadModule
多個 MPM 會導致開機失敗,並出現下列錯誤。
AH00534: httpd: 設定錯誤:已載入多個 MPM。
此功能使用 configure
腳本的 --enable-mpms-shared
選項啟用。輸入引數 all
時,將安裝平台的所有可能 MPM。或者,可以將 MPM 清單指定為引數。
預設的 MPM,會自動選取或使用 configure
腳本的 --with-mpm
選項指定,將載入到已產生的伺服器組態檔。編輯 LoadModule
指令,選取不同的 MPM。