WWW伺服器講解 (2)

火星人 @ 2014-03-29 , reply:0



新版 Apache 的特色

RedHat 9.0 版隨附的 Apache 伺服器是 2.0 版,相較於過去推出的 1.3 版有非常大幅度的改變,2.0 版的 Apache 不但支持多重處理器系統、支持 ipv6,也重新改寫了函式庫。新版 Apache 內的模塊全部使用新的函式庫來編譯,使得所有模塊都能支持 DSO 動態載入。(DSO 不算是新東西,過去一直不是 Apache 預設的做法,在前版 Apache 上想要使用 DSO 必須自己重新編譯 Apache)。除此之外,新版 Apache 也支持一種稱為過濾器(Filter)的全新模塊,過去使用的舊模塊則被稱為掌舵者(Handler)模塊。

說到 filter 我想經常使用 Linux 指令的人一定不陌生,當一次使用多個 shell 指令時,我們會使用管道符號來串接指令,而在 Linux 上管道符號就被稱為 filter 符號,這意味著,這些模塊可以像 shell 指令一樣串接在一起,例如:ls | grep a | less,透過多個程序接力運作最後可以得出比較複雜有彈性的結果。過去使用的 Handler 模塊,在處理完程序網頁的內容后,會直接將處理結果推送回瀏覽器端;而 Filter 模塊則在處理完后,將處理結果送回給 Apache core module,以便交給其它 Filter 模塊進行後續處理。

事實上這個新的轉變在 Microsoft IIS 上已經行之多年,它能帶來最大的好處,就是網頁伺服器將有能力去處理混用多種 script 語言所設計出來的複雜網頁,這在過去被認為用途不大,但隨著 Web Computing 的風行,這已經成為不得不然的趨勢,事實上 Apache 這樣的轉變,將有助於吸納原來 IIS 及 JAVA 伺服器的使用者,因為使用 ASP 或 JSP 的網頁在 Apache 上執行已經不再只是夢想。

除了這些重大的改變以外,2.0 版在組態設定上有一些改變,這個改變是好是壞就見仁見智了,筆者認為預設的組態對於中文世界的使用者特別是中小學來說是相當不友善的,必須要經過蠻多修改才能使用,與過去 1.3 版相比改變還真大!下面就來說明組態檔中新舊版本不同的地方:

conf.d

新版的 Apache 將各種模塊會用到的組態檔集中擺放在 /etc/httpd/conf.d 資料中,例如:mod_perl、mod_ssl、mod_php......等,因此在組態檔中有這一行:

Include conf.d/*.conf

如果您的 Apache 是從舊版升級上來的,記得把這一行加到原來的組態檔中。

IP 與埠號綁定

舊版 Apache 是使用 BindAddress 和 Port 來指定伺服器提供服務的位置,新版的 Apache 則是使用 Listen 來宣告要傾聽的埠,使用 ServerName 指定埠的方式來宣告是由哪個 DN 來提供該服務,好處是一台 Web 將可以同時服務多個 Port,甚至可以利用埠的不同來設計虛擬站台(過去有所謂 IP base、name base 虛擬站台,現在又多了 Port base,有關虛擬站台在後面章節說明),例如:

1.3 版 2.0 版

BindAddress 192.168. 1.2

Port 12000

ServerName wam.spps.tp.edu.tw Listen 12000

ServerName wam.spps.tp.edu.tw:12000

Multi-Processing Modules(MPMs)

MPMs 是一群特殊的模塊,和其它模塊不同它們是無法動態載入的(DSO), 它們必須在安裝 Apache 時就決定要用哪一個,目前 MPMs 有三種 ,分別是:prefork、worker 和 perchild。像過去 1.3 版那樣在 Apache 激活時,即預先將要提供服務的 StartServers 一併 fork 好,這種做法就稱為 prefork,其它兩種作業模式 RedHat 8.0 尚未提供,必須等新的 rpm 出來后才能安裝使用。

三個模塊分別採用不同的內存管理方式,其中 perchild 使用一個進程來提供服務,prefork 使用子程序來提供服務,而 worker 則兼用兩種方法,它們的差異在於:執行緒可共享內存,並使用內存與其它進程溝通;子程序則獨立使用內存,且利用檔案與其它子程序溝通。前者效能較高,後者比較安全穩定。

三個模塊被設計用來應付不同的效能需求,小型實驗網站使用 perchild,它會同時激活 5 個 Server,每個 Server 最多執行 10 個進程,因此可同時應付 50 條聯機,假設有開啟 KeepAlive 功能,則最多可同時服務 5000 個要求,相當於 IIS 中的 1000 人以下存取量(在 IIS 中也可以進行效能調整,兩者相互對照比較容易理解 MPMs 機制),預設的 prefork 是提供給中量級網站使用,最多可同時接受 3000 條聯機,服務 30000 個要求,重量級網站則使用 worker,最多可同時接受 22500 條聯機,約可服務 20 萬個要求。

直接受此改變影響的包含:StartServers、MinSpraeServers、MaxSpareServers、MaxClients、MaxRequestsPerChild、NumServers、StartThreads、MinSpareThreads、MaxSpareThreads、MaxThreadsPerChild....等 ,默認值如下:

Server-Pool Size Regulation

Dynamic Shared Object(DSO)

新版 Apache 已經全面採用 DSO,過去 DSO 是編譯 Apache 的選項之一,由於一直未被各版本 Linux 支持,因此如果想要使用必須自行下載原始文件編譯,Apache 模塊全面改寫應該與全面採用 DSO 有很密切的關連。如前所述,由於 Apache 模塊改以過濾器的方式運作,因此有許多模塊被合併、分割、移除或改名,模塊之間串接的順序也變得更為重要,因此 Apache 允許模塊可以指定自己的順序,過去於組態檔中提供的 AddModule 和 ClearModuleList 已經被取消不再使用,LoadModule 指令的順序也被忽略。安裝 mod_perl、mod_ssl、mod_php......等 RPM,也不用再去新增 LoadModule 設定,因為它們會自動被載入。另外,過去用來偵測哪些模塊被載入的 HAVE_XXX 宏命令,也不再使用了,因為現在的模塊是動態載入的。




[火星人 via ] WWW伺服器講解 (2)已經有477次圍觀

http://www.coctec.com/docs/linux/show-post-204723.html