IIS6、IIS7和IIS8各版本的差別
一、寫在前面
目前市面上所用的IIS版本估計都是>=6.0的。所以我們主要以下面三個版本進行講解:
伺服器版本 | IIS預設版本 |
server2003 | 6.0 |
server2008 | 7.0 |
server2012 | 8.0 |
二、IIS6的請求過程
由圖可知,所有的請求會被伺服器中的http.sys元件監聽到,它會根據IIS中的Metabase檢視基於該Request的Application屬於哪個Application Pool,如果該Application Pool不存在,則建立之。否則直接將Request發到對應Application Pool的Queue中。
每個Application Pool對應著一個Worker Process:w3wp.exe。在IIS Metabase中維護著Application Pool和w3wp的對映。WAS(Web Administrative service)根據這樣一個mapping,將存在於某個Application Pool Queue的request傳遞到對應的worker process(如果沒有,就建立這樣一個程序)。在worker process初始化的時候,載入ASP.NET ISAPI。
同時,在w3wp.exe的內部,ASP.NET是以IIS ISAPI extension的方式加到IIS(其實包括ASP 以及PHP,也都以相同的方式配置),ASP.NET ISAPI進而載入CLR。從而為ASP.NET Application建立一個託管的執行環境,在CLR初始化的使用會載入兩個重要的dll: AppManagerAppDomainFactory和ISAPIRuntime。通過AppManagerAppDomainFactory的Create方法為Application建立一個Application Domain;通過ISAPIRuntime的ProcessRequest處理Request,進而講流程拖入到ASP.NET Http Runtime Pipeline的範疇。
注:ISAPI,意思:網際網路伺服器與應用程式介面(Internet Server Application Program Interface).
三、IIS7的工作過程
1.HTTP.sys監聽攔截客戶端請求開始處理;
2.HTTP.sys通過配置資訊聯絡WAS獲取相關資訊;
3.WAS向配置儲存中心請求配置資訊。applicationHost.config;
4.WWW服務使用配置資訊去配置HTTP.sys處理策略;
5.WWW服務使用配置資訊去配置HTTP.sys處理策略;
6.WAS為這個請求對應的應用程式池(Application Pool)開啟W3WP Worker Process;
W3WP Worker Process處理以後,將Response返回給HTTP.sys;
客戶端接收到Response內容。
注意:我們稱3-6為初始化配置的過程,配置完畢之後,以後的請求就直接到第七步。當然IIS被重啟了,就重頭來過。
四、IIS8和IIS7有哪些不一樣的地方
1.IIS 8.0只能運行於>=Windows Server 2012 and Windows 8的平臺上;
2.IIS 8.0 Application 的初始化被包括在IIS 8.0中。IIS 7.5 Application初始化(RC)被作為一個外帶模組。
3.IIS 8.0 管理工具已經為ASP.net 4.5功能更新,IIS 7.5中還沒有;
4.IIS 8.0 集成了SSL認證支援,IIS 7.5還沒有;
5.IIS 8.0 CPU節流已經得到更新且包括額外的節流選項,而IIS 7.5還沒有變化;
6.IIS 8.0 集成了動態IP 地址限制功能;
7.IIS 8.0 集成了FTP嘗試登陸限制功能;
8.IIS 8.0在NUMA上的多核擴充套件;