1. 程式人生 > >淺談 IIS7.0 架構

淺談 IIS7.0 架構

IIS是Internet Information Server的縮寫,它是微軟公司主推的WEB伺服器,現在使用者一般常用的版本是Windows2003裡面包含的IIS 6或者是更早的IIS 5,IIS與Window NT Server完全整合在一起,因而使用者能夠利用Windows NT Server和NTFS(NT File System,NT的檔案系統)內建的安全特性,建立強大、靈活而安全的Internet和Intranet站點。IIS支援ISAPI,使用ISAPI可以擴充套件伺服器功能, IIS的設計目的是建立一套整合的伺服器服務,用以支援HTTP、FTP和SMTP,它能夠提供快速且集成了現有產品,同時可擴充套件的Internet伺服器。

  新的IIS7在Windows Server2008中加入了更多的安全方面的設計,使用者現在可以通過微軟的.Net語言來執行伺服器端的應用程式。除此之外,通過IIS7新的特性來建立模組將會減少程式碼在系統中的執行次數,將遭受黑客指令碼攻擊的可能性降至最低。從安全的觀點來考慮,這是IIS所涉及的一個新領域。 如此多的新特性,讓我們對Windows Server2008中的IIS7充滿了渴望,下面就讓我們一起看看IIS中五個最為核心的增強特性:

  完全模組化的IIS

  

  如果你非常熟悉流行的Apache Web server軟體,那麼你會知道它最大的優勢就在於它的定製化,你可以把它配置為只能顯示靜態的HTML,也可以動態的載入不同的模組以允許不同型別的服務內容。而現在使用的IIS卻無法很好的實現這一特性,這樣就造成了兩方面的問題:其一,由於過多使用者並未使用的特性對於程式碼的影響,效能方面有時不能讓使用者滿意;第二,由於預設的介面過多所造成的安全隱患。

  新的IIS7則完全解決了這個問題,IIS7從核心層講被分割成了40多個不同功能的模組。像驗證、快取、靜態頁面處理和目錄列表等功能全部被模組化。這意味著你的Web伺服器可以按照你的執行需要來安裝相應的功能模組。可能存在安全隱患和不需要的模組將不會再載入到記憶體中去,程式的受攻擊面減小了,同時效能方面也得到了增強。

  通過文字檔案配置的IIS7

  IIS7另一大特性就是管理工具使用了新的分散式web.config配置系統。IIS7不再擁有單一的metabase 配置儲存,而將使用和ASP.NET支援的同樣的web.config檔案模型,這樣就允許使用者把配置和web應用的內容一起儲存和部署,無論有多少站點,使用者都可以通過web.config檔案直接配置,這樣當公司需要掛接大量的網站時,可能只需要很短的時間,因為管理員只需要拷貝之前做好的任意一個站點的web.config檔案,然後把設定和web應用一起傳送到遠端伺服器上就完成了,沒必要再寫管理指令碼來定製配置了。

  同時管理工具支援“委派管理(delegated administration)”,使用者可以將一些可以確定的web.config檔案通過委派的方式,委派給企業中其他的員工,當然在這種情形下,管理工具裡顯示的只是客戶自己網站的設定,而不是整個機器的設定,這樣IIS管理員就不用為站點的每一個微小變化而費心,版本控制同樣簡單,使用者只需要在組織中保留不同版本的文字檔案,然後在必要的時候恢復它們就可以了。

  微軟的產品向來以使用者介面友好引以為豪,然而作為為IT人士設計的IIS7伺服器這一點卻好像並不明顯,回想從IIS 4 到IIS 6 ,提供給使用者的管理控制檯操作起來並不十分方便,而且由於技術等原因的限制,使用者很難通過一個統一的介面來實現全部的管理工作。

  

                                         MMC 圖形模式管理工具

  而在新的IIS 7中,這一問題得到了明顯的改觀,使用者現在可以用管理工具在Windows客戶機器上建立和管理任意數目的網站。而不再侷限於單個網站,同時相比IIS之前的版本,IIS7的管理介面也更加的友好和強大,此外IIS7的管理工具是用.NET和Windows Forms寫成的,是可以被擴充套件的。這意味著使用者可以新增自己的UI模組到管理工具裡,為自己的HTTP 執行時模組和配置設定提供管理支援。

  IIS 7安全方面的增強

  安全問題永遠是微軟被攻擊的重中之重,其實並非微軟對安全漠不關心,實在是因為微軟這艘巨型戰艦過於龐大,難免百密一失,好在微軟積極的響應著每一個安全方面的意見與建議。IIS的安全問題則主要集中在有關.NET程式的有效管理以及許可權管理方面的問題。而IIS 7正是針對IIS 伺服器遇到了安全問題做了相應的增強。

  在新版本中IIS 和ASP.NET 管理設定整合到了單個管理工具裡。這樣,使用者就可以在一個地方檢視和設定認證和授權規則,而不是像以前那樣要通過多個不同的對話方塊來做。這給管理人員提供了一個更加一致和清晰的使用者介面,以及web平臺上統一的管理體驗。

  在IIS7中,.NET應用程式直接通過IIS程式碼執行而不再發送到Internet Server API擴充套件上,這樣就減少了可能存在的風險,並且提升了效能,同時管理工具內建對ASP.NET 3.0的成員和角色管理系統提供管理介面的支援。這意味著使用者可以在管理工具裡,建立和管理角色和使用者,以及給使用者指定角色,下面是IIS 7 完整的元件分報圖。

  

                                    IIS 7 完整的元件分報圖

  IIS 7的Windows PowerShell 管理環境

  相信關注指令碼程式設計或者是Exchange Server 2007的朋友都不會對Windows PowerShell感到陌生, Windows PowerShell是一個特為系統管理員設計的Windows 命令列shell 。在這個 shell 中包括一個互動提示和一個可以獨立,或者聯合使用的指令碼環境。對於熱愛指令碼管理的IT pro們Windows PowerShell必將讓他們愛不釋手。而對於IIS伺服器,Windows PowerShell同樣可以提供全面的管理功能。

  不過雖然PowerShell也可以管理執行在Windows Server 2003上的IIS6,但是IIS7才是特為通過PowerShell的命令列來進行管理的。它包括了新的APPCMD功能,APPCMD通過標準的命令列介面來建立和配置站點,這樣的命令列工具的應用場景也非常常見,當用戶的環境中用到例如指令碼管理的時候,APPCMD就將發揮非常其極大的優勢。

  IS 7.0是包括在Windows Vista客戶機上的,該作業系統的家庭版本也帶有IIS 7.0(而不象IIS 5.1,只有在XP Professional上才有)。伺服器的IIS 7.0版本將在今年稍後隨Windows Server2008伺服器釋出,將新增一堆額外的部署特性,包括更加豐富的主機支援,安全的FTP支援,以及內建的web farm部署支援等。

  Web farm支援將是特別地酷,它將允許你在一個包含了執行一個伺服器所需的所有編碼,配置,內容和金鑰的檔案共享上部署你的web應用。然後你可以新增任意數目的無狀態,無配置的web伺服器到一個web farm上,只需將它們指向那個檔案共享,來動態裝載它們的配置設定(包括繫結,虛擬目錄,應用池設定等等)和應用內容即可。這使得在多個機器上擴縮一個應用簡直是小菜一碟,可避免使用複製方法來做配置和應用部署(只要把檔案拷貝到檔案共享上,web farm裡的所有機器就會馬上裝載變動過的檔案)。

  推出Windows Server2008伺服器的Beta3版本支援go-live許可,所以你不久就能利用這個功能。我們已經在用IIS 7.0叢集執行 Windows Server2008 了,所以你不會寂寞的!

  

                                       Windows PowerShell 管理圖

  IIS7.0 遷移

  IIS7.0 遷移網站比IIS6.0更方便,因為Apache Web server它最大的優勢就在於它的定製化管理,IIS7.0現在使用Apache概念,所以把站點的配置檔案拷貝到另一臺IIS7.0主機上即可以,詳情請了解上面《通過文字檔案配置的IIS7》,《IIS 7的Windows PowerShell 管理環境》。

  ASP.NET和IIS 7.0之整合

  在早期的IIS版本中,開發人員需要編寫ISAPI擴充套件/過濾器來擴充套件伺服器的功能。除了寫起來非常痛苦外,ISAPI在如何接入伺服器以及允許開發人員定製方面也是非常有限。例如,你無法在ISAPI擴充套件中實現URL重寫程式碼(注:ASP.NET是以ISAPI擴充套件的方式實現的)。假如你把執行時間長的程式碼編寫成ISAPI過濾器的話,結果是你將佔用web伺服器的I/O執行緒(這就是我們不讓託管程式碼在請求的過濾器執行階段執行的原因)。

  我們在IIS7中對核心IIS處理引擎做的一個重大的架構級變動是通過一個新的模組化的請求管道架構來促成極其豐富的擴充套件性。你現在可以通過與web伺服器註冊一個HTTP擴充套件性模組(HTTP Extensibility Module),在任意一個HTTP請求的生命週期的任何地方編寫程式碼。這些擴充套件性模組可以使用native的C++程式碼或.NET託管程式碼來編寫(你可以使用現有的ASP.NET System.Web.IHttpModule介面來實現)。

  所有“內建”的IIS7功能(認證,授權,靜態檔案供應,目錄清單支援,經典的ASP,記錄日誌等),現在都是使用這個公開的模組化的管道API來實現的。這意味著你可以除去這些IIS7“內建”功能的任意一個,而以你自己的實現來替換/擴充套件這些功能。

  IIS 7.0上的ASP.NET本身也從以ISAPI的實現形式變成直接接入IIS7管道的模組:

  

                                            IIS6.0 和IIS7.0 比較圖

  這帶來諸多好處:

  1) 你現在可以對伺服器的所有請求(例如, .htm,.php,.jsp檔案)使用ASP.NET表單認證,成員/角色,以及任何其他特性。

  2) 你現在可以輕鬆地重寫任何web請求的URL或者以種種有趣的方式對請求做改動。

  3) 你可以使用VB或C#替換或擴充套件任何現有的IIS特性(例如,你可以除去內建的目錄清單模組,接入你自己的模組)。

  這確實給.NET開發人員帶來了無窮多的擴充套件性機會。

  IIS 7.0 六大新特性:

  1)模組化的網路核心允許使用者增加和刪除特定的功能。如果要使用服務統計構件,僅需幾個模組(不包括ISAPI)。

  2)一個統一標準的HTTP管道,它對應於本地管理方面的應用程式。使用者可以對經典的ASP網頁使用基於窗體的認證系統。

  3)使用者可以建立自己的IHttpModule以及IHttpHandlers,並且把它們插入到統一的管道。

  4)新款分散式的XML設定系統,它利用了ASP.NET的設定系統的優點。

  5)改善的診斷和問題解答機制,包括了新Runtime狀態以及跟蹤功能。

  6)新型可擴充套件,面向任務的管理員使用者介面。

  總而言之,IIS 7將為Web管理員以及Web愛好者提供更加豐富,更加易用的管理工具。在新的IIS7中,無論是管理方面還是安全方面都得到了全新的設計,而從使用者群的角度上講,利用IIS7, 個人使用者可以更快,更簡便的建立自己的站點,而企業使用者則可以更加全面,更加安全的維護和管理自己的WEB環境。隨著Windows Server2008的日益臨近,相信有關IIS7管理的相關介紹也會越來越多,究竟新版本有沒有帶給我們實質的變革,還是隻是一個IIS伺服器功能的增強,讓我們拭目以待吧。