第二卷 深入剖析IIS 6.0(下)(2 / 3)

IIS 6.0的配置數據是標準的文本文件(XML文件),所以可以用記事本之類的文本編輯器打開和編輯。如果修改了IIS 5.0或IIS 4.0的配置數據,有時必須重新啟動IIS,如果係統上網站的數量很多,可能需要不少時間,例如ISP的服務器就屬於這類情況。為了解決這個問題,IIS 6.0支持一種"運行時允許編輯"功能。"運行時允許編輯"功能按照如下方式啟用:在IIS管理器中,右擊服務器,選擇菜單"屬性",然後選中"允許直接編輯配置數據庫"選項,如圖三所示。啟用了這個功能之後,如果我們用記事本打開配置數據文件,插入一個虛擬目錄的配置,然後保存並關閉配置文件,IIS 6.0幾乎立即就能根據配置文件的設置作相應的修改,根本無需重新啟動。

圖三

既然允許直接編輯配置文件,因配置文件不合法造成的服務器、應用程序故障也必然增多。為此,IIS 6.0提供了配置文件曆史版本目錄,即\system32\inetsrv\history,每次修改配置數據或重新啟動IIS 6.0,IIS 6.0都會在該目錄中保存一份原有的配置數據。

三、IIS管理器

每次產品重大升級,人們都會試圖從用戶界麵尋找令人激動的新功能。IIS 6.0的管理器確實有了變化,不過改動之處出乎意料地少。

其中一個改動之處雖小,但很實用。如果在IIS管理器中右擊一個文件夾,現在可以選擇"權限"菜單打開文件夾的"安全"對話框。在這個對話框中可以設置文件夾的NTFS授權,不必再離開IIS管理器。雖然這是一個小小的改動,也許它今年會為全世界所有的IIS管理員總共節省數千小時的工作時間。

右擊一個Web網站,選擇"屬性",轉到"目錄安全性"頁,點擊"安全通信"下麵的"編輯"按鈕,在這裏可以找到另一個重要的改動之處--安全通信屬性頁允許配置SSL、證書信任列表(CTL)、客戶證書。在IIS 5.0和IIS 4.0中,除非在Web網站上安裝一個證書,否則不能訪問該屬性頁,這一限製令人不快,因為從技術上看,配置CTL、客戶證書並不要求服務器上安裝了證書,換句話說,在IIS 5.0中我們安裝證書的唯一用途可能就是因為用戶界麵需要它。IIS 6.0改正了這一多餘的要求,現在我們不必在Web服務器上安裝證書也可以訪問和使用該屬性頁了。

四、通配符應用程序

如果你熟悉IIS 5.0和IIS 4.0的ISAPI篩選器,可能也熟悉它們的缺點。ISAPI篩選器不僅編寫困難,而且由於它們在Inetinfo進程內運行,如果編寫時不小心留下了一點錯誤,很容易導致災難性的後果,出錯的代碼可能造成整個IIS崩潰。另外,ISAPI篩選器不能擁有常規ISAPI DLL擁有的功能。當然,不管怎樣,在IIS 5.0和IIS 4.0中,ISAPI篩選器仍是一種非常有用的組件,是唯一可以針對所有進入Web服務器或Web網站的請求執行操作的代碼。

IIS 6.0提供了一種更加靈活的新型機製來提供通常由ISAPI篩選器提供的服務,它就是ISAPI截取器(Interceptor),或者稱為通配符應用程序(Wildcard Application)。通配符應用程序的配置方式是:在IIS管理器中右擊Web網站,選擇菜單"屬性",轉到"主目錄"頁麵,點擊"應用程序設置"下麵的"配置"按鈕,出現"應用程序配置"對話框,如圖四所示。在對話框的"映射"頁中,我們可以將一個或多個ISAPI DLL配置成通配符應用程序。對於每一個接收到的請求,IIS 6.0將調用這裏列出的各個通配符應用程序。除了針對所有網站配置通配符應用程序,還可以針對單個網站或在目錄層次上配置通配符應用程序。由於這些ISAPI截取器是標準的ISAPI應用程序,它們具有普通ISAPI應用程序具備的所有功能,包括訪問消息正文的能力,而不僅僅象ISAPI篩選器那樣訪問消息頭。

圖四

通配符應用程序可以做到開發者要做的任何事情,諸如URL定製、驗證身份、記錄特殊的日誌信息、檢測攻擊企圖、創建內容,等等。通配符應用程序結束處理後,它把請求轉交給適當的處理引擎(例如處理ASP頁麵的asp.dll),由處理引擎進一步處理請求。另外,通配符應用程序還可以通過調用為ISAPI應用程序新增的ExecuteURL功能,將請求傳遞到同一個應用程序池中的任意頁麵。

新增的ISAPI通配符應用程序為創造性的應用程序設計大開方便之門。例如,IIS 6.0的URL授權功能就是作為一個ISAPI通配符應用程序(urlauth.dll)實現。URL授權功能允許IIS 6.0根據一係列的規則授予對某個URL的訪問權,例如用戶是否為某個組的成員、地理位置,以及其他在數據庫或AD中與用戶有關的信息。有關ISAPI通配符應用程序和URL授權的更多信息,請參見IIS 6.0的幫助文檔。

五、日誌功能

服務器的日誌功能很少成為首要的關注對象,但卻是日複一日的服務器管理和監視工作不可或缺的助手。IIS 6.0在日誌功能方麵有許多重大的改進,但遺憾的是,W3SVC日誌事件仍不能以本地時間記錄。

在IIS 6.0中,記錄日誌的功能已經改為由http.sys實現,http.sys在內核模式下運行。這一改進加快了日誌寫入速度,同時避免了多個工作進程爭用同一日誌文件。某些特殊的情況下,http.sys會遇到錯誤,這時它應該但卻不能將日誌信息寫入Web網站的日誌,例如,工作進程正在被回收,禁止http.sys處理用戶請求,或者用戶試圖連接到服務器,但請求中隻提供了IIS所需信息的一部分。如果出現這類情況,http.sys將把事件寫入一個新的日誌文件httperr.log。

在排解故障、優化IIS 6.0的過程中,httperr.log日誌文件是十分重要的。默認情況下,httperr.log文件保存在\system32\logfiles目錄,但可以修改,修改方法是找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters注冊子鍵,在它下麵添加一個名為ErrorLoggingDir的字符串值,在ErrorLoggingDir中設置保存日誌文件的完整路徑。在httperr.log日誌文件中可以找到的信息包括:所有的503(服務不可用)錯誤,空閑連接超時,解析URL時出現的各種錯誤,最後10個提交給失敗的應用程序池的請求。

IIS 6.0還擁有一種稱為二進製日誌的功能,啟用這個功能後,IIS 6.0將把Web網站的所有日誌信息寫入一個二進製格式的日誌文件,日誌文件的擴展名是.ibl。要啟用二進製日誌功能,隻要把配置文件的W3SVCC/CentralBinaryLoggingEnabled條目設置成ture(1)即可。對於ISP來說,這個功能應該非常有用。ISP的每台機器上可能有1000甚至更多的Web網站,如果每個Web網站每天生成一個日誌文件,日誌文件的總數很快會達到一個天文數字。微軟最近發布的Log Parser 2.0工具能夠讀取二進製日誌文件並生成報告,這個工具可以從http://download.microsoft.com/download/iis50/utility/2.0/nt5xp/en-us/setup.exe下載。Log Parser 2.0還能夠讀取前麵介紹的httperr.log文件並生成報告。

從很久以前開始,IIS就允許指定本地服務器上保存日誌文件的目錄了。不過,雖然IIS 5.0和IIS 4.0的IIS管理器允許在指定日誌文件路徑的時候輸入一個遠程服務器的通用命名規範(UNC)的路徑,但Web服務器實際上不會把日誌保存到遠程服務器。隻有IIS 6.0才真正支持日誌文件路徑的UNC路徑名。