Apache 2.2.0是Apache httpd服務器重要的發布版并且包含了許多重要的變化。其中許多變化是現有模塊的改進,但是,還有很多新的模塊和在運行功能方面的改進。本文將討論一些變化的元素(用例子和替代的配置說明)以及討論什么時候要升級到新的版本和什么時候要等待新的版本。
新功能和改變
新的Apache 2.2.0并不只是現有軟件的升級發布版。其中許多代碼是新的,或者已經進行了重大的改進,并且擴大了代碼的內容以提供額外的功能,或者擴大或簡化了目前的功能。
配置方法的變化
Apache中的配置文件一直與其用戶保持又愛又恨的關系。一些用戶喜歡單一的、全部在一個文件中進行配置的方法。而另一些人喜歡把配置文件分成多個并且使用import指令來插入具體的設置信息。雖然這并不影響設置,使用多個文件更容易理解而且更方便,因為它能夠讓你把為單個虛擬主機進行的設置放在一個單個的文件中。
Apache發布版軟件默認的配置文件是單一類型的,通常包含許多用戶不使用或者不理解的指令,并且包含一些不需要用戶修改的指令。有些 Linux發布版(例如Gentoo)默認狀態已經把這個配置文件分開了?,F在Apache 2.2.0里,這已經是標準發布版的一個標準的功能。
主要的httpd.conf文件依然保留。此外,配置文件有選擇地包括下列元素的標準配置文件:
•服務器池管理(MPM<多處理模塊>配置)
•多語言錯誤提示
•動態目錄列表形式配置(Fancy directory listings)
•語言設置
•用戶家目錄
•關于用戶請求和配置的實時信息(server-info 與/server-status)
•虛擬主機配置
•對Apache手冊的訪問
•分布式編撰和版本信息(WebDAV)
•種類繁多的默認設置
•SSL配置
文件拆分并不是強制性的。你應該能夠毫無問題地使用現有的單一文件配置或者多文件配置。然而,你可以考慮根據默認配置中顯示的思路拆分文件。
授權/身份識別模塊
雖然授權和身份識別本身沒有改變,但是,提供這些功能模塊本身已經重建了,并且在某些情況下重新命名了,以便更容易地裝載需要的的組件。此外,還增加了一個新的模塊以便通過LDAP (mod_authnz_ldap)提供授權。
標準的授權模塊已經進行了修改以便保持模塊名稱和這些模塊提供的授權類型之間的一致性。例如,原來的“mod_auth”模塊已經分成了 “mod_auth_basic”(現在專門用于HTTP授權)和“mod_authn_file”模塊(通過文件向授權提供后端接口)。這些模塊的前綴現在具體指明這些模塊在授權/身份識別過程中的任務。例如:
•mod_auth_* 指明這類模塊是執行HTTP身份識別機制的(如,mod_auth_basic 和 mod_auth_digest等)。
•mod_authn_* 指明這類模塊是執行后端身份識別的(如,mod_authn_file 和 mod_authn_dbm)。
•mod_authz_* 指明這類模塊是執行授權任務的(如,mod_authz_dbm 和 mod_authz_host)。
•mod_authnz_* 指明這類模塊是執行身份識別和授權兩項任務的(包括新的mod_authnz_ldap模塊)。
這個結果是產生了一套非常直觀的模塊,能夠更精細地管理你的配置中設置的身份識別和授權支持。這還使個性化的身份識別和授權模塊更容易開發,因為你能夠更方便地與現有的其它模塊整合起來。
代理/緩存模塊
新增加了一個負載平衡模塊“mod_proxy_balancer”。這個模塊為主要的“mod_proxy”代理模塊提供負載平衡服務。負載平衡器能夠通過請求計數和通信量兩種指標在多個代理進程間分配請求。請求計數僅計算對服務器的請求的數量并且把請求發布給所有的代理進程,直到每一個代理進程都為同樣數量的請求服務。
加權通信量計算原理與簡單的請求計數分配基本相同。但是,你可以調整單個代理進程的工作量來讓某代理進程執行的請求就會比其他多。配置是按照字節進行的,而不是按照簡單的請求。因此,你可以配置一個代理進程處理的字節數量是其他代理進程的一倍,盡管這種情況可能實際的請求數量要少一些。
新的代理平衡器還包括一個額外狀態顯示,與監視服務器狀態和配置的/server-status和/server-info 系統類似。
緩存模塊(mod_cache, mod_disk_cache, and mod_mem_cache)在Apache 2.2.0前一直被認為還處于沒有正式完成的測試階段,盡管已經有很多機構在使用這些模塊并且并沒有遇到什么問題。然而,這些模塊現在被認為是已經可以正式在生產環境中應用了。還有一個名為“htcacheclean”的新程序。這個程序能夠清除緩存文件的文件數據庫。這個程序可以作為一個一般程序或者守護程序來運行,它還能夠提供關于緩存目錄大小的統計數據。
過濾器模塊
mod_filter過濾模塊也擴展了功能,允許過濾器根據有條件的規定運行。這就改變了以前的舊模式。根據舊模式,只能根據 AddOutputFilter指令的配置無條件地對文件實施過濾,或者根據AddOutputFilterByType指令稍微靈活一點地對文件實施過濾。
現在,不用增加具體的過濾器來指定文件的類型,我們創建了一個合適的過濾鏈,輸出由過濾鏈中的每一個過濾器來處理。這就需要宣布可用的過濾器類型、如果必要的話,還要提供源請求(文件類型)和使用的過濾器。
舉個例子,以前風格的對服務器端包括文件(SSI)的過濾指示是:
AddOutputFilter INCLUDES .shtml |
現在改為:
FilterDeclare SSI FilterProvider SSI INCLUDES resp=Content-Type $text/html FilterChain SSI |
這個過濾器鏈聲明使我們能夠在這個鏈中的具體點上增加過濾器,甚至指出根據某個具體的條件禁用某個過濾器。例如,你也需要為所有的輸出增加 SSL,除非這種輸出是一種CGI。你可以通過向這個鏈增加SSI過濾器來達到目的,但是,當請求是來自一個CGI腳本的時候,你可以刪除那個過濾器。
數據庫支持
Apache模塊中的數據庫支持功能通常需要額外的編程以便建立一個wrapper程序以獲得數據庫的訪問權限。例如,如果你要通過MySQL 或者PostgreSQL增加一個基于SQL的身份識別,那么,這個模塊必須有自己的SQL數據庫接口。編程和性能問題使這種方法成為一種不太理想的解決方案。
Apache現在提供mod_dbd模塊,使用一個標準的接口提供數據庫的連接。這個模塊使用apr_dbd接口。這個接口還意味著這種數據庫連接能夠通過提供大量的可用連接在一個線程的環境中應用。這應該有助于提高數據庫環境的靈活性,并且改善需要數據庫連接的模塊的性能。
請注意,這不是動態網站中的數據庫訪問解決方案。但是,在將來,也許能夠通過提供諸如mod_perl和mod_php等基于模塊的接口來提供這種數據庫連接。
模塊開發的改變
當制作一些與Apache一起使用的個性化模塊的時候,需要開發某些功能的接口。這種接口也做了一些后端的改變。發布版說明提供了更詳細的信息。但是,基本的改變包括如下這些方面:
•連接錯誤記錄使這個軟件更容易記錄與連接有關的錯誤信息。
•當進行一項配置測試時,測試配置hooks(連線)可提供測試結果。
•堆棧大小可以修改以用于基于線程的MPM。
•協議處理在輸出過濾器上實施。為了與過濾系統進行的修改保持一致,過濾器現在要負責為mod_filter模塊設置正確的輸出類型。
•一個監視器連接能夠讓模塊自動要求定期或者按計劃執行工作。
•正則表達式接口已經改變了,而且PCRE(Perl兼容的正則表達式)庫已經升級到了5.0版。支持正則表達式的頭文件和正則表達式函數數已經修改了。
•新的DBD框架使這個軟件很容易與SQL數據庫建立接口。但是,應該使用他們自己定制的系統對模塊進行修改。
任何使用這些功能的模塊都應該相應地升級。
程序的修改
支持Apache httpd服務器的這些程序已經增加了一些小的改進功能。首先,對httpd增加了一個新的命令行選項,這應該能夠簡化模塊可用性的調試?,F在總是能夠使用-l命令行選項列出內建在httpd運行時代碼中的模塊列表,例如:
$ httpd -l Compiled in modules: core.c prefork.c http_core.c mod_so.c |
但是,這個功能僅列出了那些內建在HTTPD二進制代碼中的模塊,動態裝載模塊(DSO)沒有列出來。對于那些在配置文件里需要動態加載的模塊,你通??梢酝ㄟ^使用-L命令行選項列出支持的指令來判斷它們是否正確加載。但是,這個方法并不很簡單和可靠。
新的-M命令行選項列出了所有的模塊、靜態鏈接到httpd服務器的模塊和根據配置共享和裝載的模塊。模塊類型(靜態或者共享)也將顯示出來:
httpd -M Loaded Modules: core_module (static,靜態) mpm_prefork_module (static) http_module (static) so_module (static) authn_anon_module (shared,共享) env_module (shared) expires_module (shared) headers_module (shared) mime_module (shared) negotiation_module (shared) setenvif_module (shared) log_config_module (shared) logio_module (shared) cgi_module (shared) alias_module (shared) rewrite_module (shared) userdir_module (shared) info_module (shared) status_module (shared) actions_module (shared) autoindex_module (shared) dir_module (shared) ext_filter_module (shared) deflate_module (shared) include_module (shared) Syntax OK |
這對于找出模塊中的問題和找出可用的單個指示是一種非常有用的方法。
通過prefork、worker和event MPM功能現在允許優雅地關閉httpd服務器,使請求能夠在服務器完全關閉之前得到服務。你還可以通過在 GracefulShutdownTimeout指令在設置中具體指定超時的時長。這樣,無論現有的請求處在什么狀態,服務器在超時之后都將關閉。
我應該現在升級還是等待?
選擇是否升級到新版本或者繼續使用當前版本和安裝的軟件仍是普遍的難題。
一方面,Apache 2.2.0僅僅是一個已經穩定的和經過良好測試的Apache httpd計劃的一個新的發布版。Apache 2.0第一個正式版本的分支v2.0.35是在2002年4月發布的。盡管有許多瑕疵和補丁,Apache 2.0系列軟件一直沒有出現重大的影響運行的問題。因此,從理論上說,2.2.0實際上是穩定的和經過良好測試的發布版的最新版本。
然而,在授權模塊中進行的修改沒有經過進一步的測試可能使人們在使用2.2.0版的時候感到擔心。這種設置變化肯定意味著你在生產環境中使用 Apache 2.2.0之前,你自己要在測試服務器上進行測試。特別是如果你的Web站點主要依靠Apache軟件驅動的身份識別和授權功能時,更要自己進行測試。
如果你與Apache安裝軟件一起使用個性化開發的模塊,你對于立即轉移到新版本應該更加小心。正則表達式引擎和API的變化將需要一些重新開發的工作。如果你的模塊使用連接到MySQL或者其它數據庫的SQL接口,那么,你應該優先于你自己個性化驅動的解決方案使用新的mod_dvd接口。不過,再次提醒一下,這僅影響使用這個技術的模塊,而不影響動態驅動的應用程序。
因此,當前的選擇是:
●Apache 2.0.55是2.2.0之前最新的穩定的發布版。
●Apache 2.2.0是最新的正式發布版,如果你不怕風險要采用這個新版本的話。
●Apache 1.3.34是最新的Apache 1.x的發布版。
(責任編輯:城塵)