如果右擊一個應用程序池、Web網站組或單個網站,然後選擇“新建”→“應用程序池(來自文件)”,或者“新建”→“網站”→“來自文件”,或者“新建”→“虛擬目錄(來自文件)”,就可以從保存的配置文件創建新的應用程序池、Web網站或虛擬目錄。因此,必要的時候,我們可以只創建和配置一個對象,利用“將配置保存到一個文件”功能導出對象的配置信息,然後利用“新建”→“虛擬目錄(來自文件)”等功能將配置信息導入到多個Web網站。這就是說,我們可以先精心配置一個模板,然後用它來創建和配置新的網站。當然,出現問題時,配置信息副本還可以用來恢復網站的設置。
由於IIS 6.0配置信息是可移植的,它還有另外一個好處,這就是方便了升級。假設我們升級時不能直接在Win 2K/IIS 5.0上安裝Windows 2003/IIS 6.0,必須換一台機器,這時就要解決如何將IIS 5.0不可移植的配置數據轉移到新的IIS 6.0服務器的問題。利用IIS 6.0配置數據的可移植性,解決辦法是:首先安裝好新的Windows 2003服務器,為原來的Win 2K服務器做一個完整的備份,然後在Win 2K服務器上安裝第二個Windows 2003服務器將它升級,導出第二個Windows 2003服務器的配置數據(用密碼加密),然後將配置數據導入到新的Windows 2003服務器。新安裝的Windows 2003服務器必須作一些調整,例如允許IUSR帳戶等,但至少現在不必重新執行全部配置操作了。
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路徑名。