IIS 架構簡介

由 IIS 小組Reagan Templin撰寫

相容性

版本 備註
IIS 7.0 和更新版本 本文所述的功能已在 IIS 7.0 中引進。
IIS 6.0 和更早版本 本文所述的功能在 IIS 7.0 之前不受支援。

簡介

Internet Information Services (IIS) 7 和更新版本提供要求處理架構,包括:

  • Windows Process Activation Service (WAS) ,可讓網站使用 HTTP 和 HTTPS 以外的通訊協定。
  • 可藉由新增或移除模組來自訂的 Web 服務器引擎。
  • 來自 IIS 和 ASP.NET 的整合式要求處理管線。

IIS 中的元件

IIS 包含數個元件,這些元件會在 Windows Server® 2008 (IIS 7.0) 和 Windows Server 2008 R2 (IIS 7.5) 中執行應用程式和 Web 服務器角色的重要功能。 每個元件都有責任,例如接聽對伺服器提出的要求、管理進程,以及讀取組態檔。 這些元件包括通訊協定接聽程式,例如HTTP.sys和服務,例如 World Wide Web Publishing Service (WWW 服務) 和 Windows Process Activation Service (WAS) 。

通訊協定接聽程式

通訊協定接聽程式會接收通訊協定特定的要求、將它們傳送至 IIS 進行處理,然後將回應傳回給要求者。 例如,當用戶端瀏覽器向網際網路要求網頁時,HTTP 接聽程式HTTP.sys會挑選要求,並將其傳送至 IIS 進行處理。 IIS 處理要求之後,HTTP.sys傳回用戶端瀏覽器的回應。

根據預設,IIS 會提供HTTP.sys作為接聽 HTTP 和 HTTPS 要求的通訊協定接聽程式。 HTTP.sys是在 IIS 6.0 中引進,做為 HTTP 要求的 HTTP 特定通訊協定接聽程式。 HTTP.sys會保留在 IIS 7 和更新版本中的 HTTP 接聽程式,但包含安全通訊端層 (SSL) 的支援。

若要支援使用 HTTP 和 HTTPS 以外通訊協定的服務與應用程式,您可以使用 Windows Communication Foundation (WCF) 等技術。 WCF 具有接聽程式配接器,可提供通訊協定接聽程式和接聽程式配接器的功能。 本檔稍後涵蓋接聽程式配接器。 如需 WCF 的詳細資訊,請參閱 MSDN 上的 Windows Communication Foundation

超文字傳輸通訊協定堆疊 (HTTP.sys)

HTTP 接聽程式是 Windows 作業系統網路子系統的一部分,它會實作為稱為 HTTP 堆疊 (HTTP.sys) 的核心模式設備磁碟機。 HTTP.sys接聽來自網路的 HTTP 要求、將要求傳遞至 IIS 進行處理,然後將已處理的回應傳回給用戶端瀏覽器。

在 IIS 6.0 中,HTTP.sys取代 Windows Sockets API (Winsock) ,這是舊版 IIS 用來接收 HTTP 要求和傳送 HTTP 回應的使用者模式元件。 IIS 7 和更新版本會繼續依賴 HTTP 要求的HTTP.sys。

HTTP.sys提供下列優點:

  • 核心模式快取。 系統會提供快取回應的要求,而不切換至使用者模式。
  • 核心模式要求佇列。 由於核心會將要求直接轉送至正確的背景工作進程,因此內容切換會造成較少的額外負荷。 如果沒有背景工作進程可以接受要求,核心模式要求佇列會保留要求,直到背景工作進程挑選為止。
  • 要求前置處理和安全性篩選。

World Wide Web Publishing Service (WWW 服務)

在 IIS 7 和更新版本中,先前由 World Wide Web Publishing Service (WWW Service) 所處理的功能現在單獨分割為兩個服務:WWW 服務和新的服務、Windows Process Activation Service (WAS) 。 這兩個服務會在相同的Svchost.exe進程中以 LocalSystem 身分執行,並共用相同的二進位檔。

注意

您也可以在檔中看到稱為 W3SVC 的 WWW 服務。

WWW 服務在 IIS 6.0 中的運作方式

在 IIS 6.0 中,WWW 服務會在 IIS 中管理下列主要區域:

  • HTTP 管理和設定
  • 程序管理
  • 效能監控

HTTP 管理與設定

WWW 服務會從 IIS 中繼資料庫讀取設定資訊,並使用該資訊來設定及更新 HTTP 接聽程式,HTTP.sys。 此外,WWW 服務會啟動、停止、監視及管理處理 HTTP 要求的背景工作進程。

效能監控

WWW 服務會監視效能,並提供網站和 IIS 快取的效能計數器。

程序管理

WWW 服務會管理應用程式集區和背景工作進程,例如啟動、停止和回收背景工作進程。 此外,WWW 服務會監視背景工作進程的健康情況,並叫用快速失敗偵測,以在數個背景工作進程在可設定的時間內失敗時停止啟動新進程。

WWW 服務在 IIS 中的運作方式

在 IIS 中,WWW 服務不再管理背景工作進程。 相反地,WWW 服務是 HTTP 接聽程式的接聽程式配接器,HTTP.sys。 作為接聽程式配接器,WWW 服務主要負責設定HTTP.sys、在設定變更時更新HTTP.sys,以及在要求進入要求佇列時通知 WAS。

此外,WWW 服務會繼續收集網站的計數器。 因為效能計數器會保留在 WWW 服務的一部分,所以它們是 HTTP 特定,而且不適用於 WAS。

Windows Process Activation Service (WAS)

在 IIS 7 和更新版本中,Windows Process Activation Service (WAS) 管理應用程式集區設定和背景工作進程,而不是 WWW 服務。 這可讓您針對 HTTP 和非 HTTP 網站使用相同的組態和進程模型。

此外,如果您不需要 HTTP 功能,則可以在沒有 WWW 服務的情況下執行 WAS。 例如,如果您不需要在 HTTP.sys 中接聽 HTTP 要求,您可以透過 WCF 接聽程式配接器來管理 Web 服務,例如 NetTcpActivator,而不需執行 WWW 服務。 如需 WCF 接聽程式配接器的相關資訊,以及如何使用 WAS 在 IIS 7 和更新版本中裝載 WCF 應用程式,請參閱 MSDN 上的 WCF 裝載

WAS 中的組態管理

啟動時,WAS 會從ApplicationHost.config檔案讀取特定資訊,並將該資訊傳遞給伺服器上的接聽程式配接器。 接聽程式配接器是建立 WAS 與通訊協定接聽程式之間通訊的元件,例如HTTP.sys。 接聽程式配接器收到設定資訊之後,他們會設定其相關的通訊協定接聽程式,並準備接聽程式以接聽要求。

在 WCF 的情況下,接聽程式配接器包含通訊協定接聽程式的功能。 因此,WCF 接聽程式配接器,例如 NetTcpActivator,會根據 WAS 的資訊進行設定。 設定 NetTcpActivator 之後,它會接聽使用 net.tcp 通訊協定的要求。 如需 WCF 接聽程式配接器的詳細資訊,請參閱 MSDN 上的 WAS 啟用架構

下列清單描述 WAS 從組態讀取的資訊類型:

  • 全域設定資訊
  • HTTP 和非 HTTP 通訊協定的通訊協定組態資訊
  • 應用程式集區組態,例如進程帳戶資訊
  • 月臺設定,例如系結和應用程式
  • 應用程式組態,例如啟用的通訊協定和應用程式所屬的應用程式集區

如果ApplicationHost.config變更,WAS 會收到通知,並使用新的資訊更新接聽程式配接器。

程序管理

WAS 會管理 HTTP 和非 HTTP 要求的應用程式集區和背景工作進程。 當通訊協定接聽程式挑選用戶端要求時,WAS 會判斷背景工作進程是否正在執行。 如果應用程式集區已經有服務要求的背景工作進程,接聽程式配接器會將要求傳遞至背景工作進程進行處理。 如果應用程式集區中沒有背景工作進程,WAS 會啟動背景工作進程,讓接聽程式配接器可以將要求傳遞給它進行處理。

注意

因為 WAS 同時管理 HTTP 和非 HTTP 通訊協定的程式,所以您可以在相同的應用程式集區中執行具有不同通訊協定的應用程式。 例如,您可以開發應用程式,例如 XML 服務,並透過 HTTP 和 net.tcp 裝載它。

IIS 中的模組

IIS 提供與舊版 IIS 不同的新架構。 IIS 不會保留伺服器本身的大部分功能,而是包含 Web 服務器引擎,您可以視需求新增或移除稱為模組的元件。

模組是伺服器用來處理要求的個別功能。 例如,IIS 會使用驗證模組來驗證用戶端認證,以及快取模組來管理快取活動。

新的架構提供下列優於舊版 IIS 的優點:

  • 您可以控制伺服器上想要的模組。
  • 您可以將伺服器自訂為環境中的特定角色。
  • 您可以使用自訂模組來取代現有的模組,或引進新功能。

新的架構也會改善安全性和簡化系統管理。 藉由移除不必要的模組,您可以減少伺服器的攻擊面和記憶體使用量,這是伺服器背景工作進程在電腦上使用的記憶體數量。 您也不需要管理網站和應用程式不需要的功能。

原生模組

下列各節說明完整安裝 IIS 7 和更新版本的原生模組。 您可以視您的需求移除它們,或將其取代為自訂模組。

HTTP 模組

IIS 7 和更新版本中的數個模組會在要求處理管線中執行超文字傳輸通訊協定特定的工作, (HTTP) 。 HTTP 模組包含模組,可回應用戶端標頭中傳送的資訊和查詢、傳回 HTTP 錯誤、重新導向要求等等。

模組名稱 描述 資源
CustomErrorModule 在回應上設定錯誤狀態碼時,傳送預設和設定的 HTTP 錯誤訊息。 Inetsrv\Custerr.dll
HttpRedirectionModule 支援 HTTP 要求的可設定重新導向。 Inetsrv\Redirect.dll
ProtocolSupportModule 執行通訊協定相關的動作,例如根據組態設定回應標頭和重新導向標頭。 Inetsrv\Protsup.dll
RequestFilteringModule 在 IIS 7.5 中新增。 依設定篩選要求,以控制通訊協定和內容行為。 Inetsrv\modrqflt.dll
WebDAVModule 在 IIS 7.5 中新增。 允許使用 HTTP over SSL 更安全地發佈內容。 Inetsrv\WebDAV.dll

安全性模組

IIS 中的數個模組會執行與要求處理管線中安全性相關的工作。 此外,每個驗證配置都有個別的模組,可讓您針對伺服器上想要的驗證類型選取模組。 還有執行 URL 授權的模組,以及篩選要求的模組。

模組名稱 描述 資源
AnonymousAuthenticationModule 當沒有其他驗證方法成功時,執行匿名驗證。 Inetsrv\Authanon.dll
BasicAuthenticationModule 執行基本驗證。 Inetsrv\Authbas.dll
CertificateMappingAuthenticationModule 使用 Active Directory 執行憑證對應驗證。 Inetsrv\Authcert.dll
DigestAuthenticationModule 執行摘要式驗證。 Inetsrv\Authmd5.dll
IISCertificateMappingAuthenticationModule 使用 IIS 憑證組態執行憑證對應驗證。 Inetsrv\Authmap.dll
RequestFilteringModule 執行 URLScan 工作,例如設定允許的動詞和副檔名、設定限制,以及掃描不正確的字元序列。 Inetsrv\Modrqflt.dll
UrlAuthorizationModule 執行 URL 授權。 Inetsrv\Urlauthz.dll
WindowsAuthenticationModule 執行 NTLM 整合式驗證。 Inetsrv\Authsspi.dll
IpRestrictionModule 限制組態中 ipSecurity 清單中所列的 IPv4 位址。 Inetsrv\iprestr.dll

內容模組

IIS 中的數個模組會執行與要求處理管線中內容相關的工作。 內容模組包含用來處理靜態檔案要求的模組、在用戶端未在要求中指定資源時傳回預設頁面、列出目錄的內容等等。

模組名稱 描述 資源
CgiModule 執行一般閘道介面 (CGI) 進程來建置回應輸出。 Inetsrv\Cgi.dll
DefaultDocumentModule 嘗試針對對父目錄提出的要求傳回預設檔。 Inetsrv\Defdoc.dll
DirectoryListingModule 列出目錄的內容。 Inetsrv\dirlist.dll
IsapiModule 裝載 ISAPI 擴充 DLL。 Inetsrv\Isapi.dll
IsapiFilterModule 支援 ISAPI 篩選 DLL。 Inetsrv\Filter.dll
ServerSideIncludeModule 進程伺服器端包含程式碼。 Inetsrv\Iis_ssi.dll
StaticFileModule 提供靜態檔案。 Inetsrv\Static.dll
FastCgiModule 支援 FastCGI,可提供 CGI 的高效能替代方案。 Inetsrv\iisfcgi.dll

壓縮模組

IIS 中的兩個模組會在要求處理管線中執行壓縮。

模組名稱 描述 資源
DynamicCompressionModule 壓縮回應,並將 Gzip 壓縮傳輸編碼套用至回應。 Inetsrv\Compdyn.dll
StaticCompressionModule 執行靜態內容的預先壓縮。 Inetsrv\Compstat.dll

快取模組

IIS 中的數個模組會執行與要求處理管線中快取相關的工作。 快取可藉由將已處理的資訊儲存在伺服器上的記憶體中,然後將該資訊重複使用到相同資源的後續要求中,藉此改善網站和 Web 應用程式的效能。

模組名稱 描述 資源
FileCacheModule 提供檔案和檔案控制碼的使用者模式快取。 Inetsrv\Cachfile.dll
HTTPCacheModule 在 HTTP.sys 中提供核心模式和使用者模式快取。 Inetsrv\Cachhttp.dll
TokenCacheModule 針對產生 Windows 使用者主體的模組,提供使用者模式快取使用者名稱和權杖組。 Inetsrv\Cachtokn.dll
UriCacheModule 提供 URL 資訊的使用者模式快取。 Inetsrv\Cachuri.dll

記錄和診斷模組

IIS 中的數個模組會執行與要求處理管線中記錄和診斷相關的工作。 記錄模組支援載入自訂模組,並將資訊傳遞至HTTP.sys。 診斷模組會在要求處理期間遵循並報告事件。

模組名稱 描述 資源
CustomLoggingModule 載入自訂記錄模組。 Inetsrv\Logcust.dll
FailedRequestsTracingModule 支援失敗的要求追蹤功能。 Inetsrv\Iisfreb.dll
HttpLoggingModule 將資訊和處理狀態傳遞至HTTP.sys以進行記錄。 Inetsrv\Loghttp.dll
RequestMonitorModule 使用執行時間狀態和控制應用程式程式設計介面 (RSCA) ,追蹤目前正在背景工作進程中執行的要求和報告資訊。 Inetsrv\Iisreqs.dll
TracingModule 將附隨報告給 Windows (ETW) 的事件追蹤。 Inetsrv\Iisetw.dll

受控支援模組

IIS 中的幾個模組支援 IIS 要求處理管線中的受控整合。

模組名稱 描述 資源
ManagedEngine 提供 IIS 要求處理管線中的 Managed 程式碼模組整合。 Microsoft.NET\Framework\v2.0.50727\webengine.dll
ConfigurationValidationModule 驗證組態問題,例如當應用程式在整合模式中執行,但已在 system.web 區段中宣告處理常式或模組時。 Inetsrv\validcfg.dll

受控模組

除了原生模組之外,IIS 還可讓您使用 Managed 程式碼模組來擴充 IIS 功能。 某些 Managed 模組,例如 UrlAuthorization,具有原生模組對應專案,可提供受控模組的原生替代方案。

注意

Managed 模組取決於 ManagedEngine 模組。

下表列出可完整安裝 IIS 7 和更新版本的受控模組。 如需受控模組的詳細資訊,請參閱 MSDN 上的 .NET Framework SDK 2.0。

模組名稱 描述 資源
AnonymousIdentification 管理匿名識別碼,這些識別碼是由支援匿名識別的功能所使用,例如 ASP.NET 設定檔。 System.Web.Security.AnonymousIdentificationModule
DefaultAuthentication 確定內容中有驗證 (Authentication) 物件。 System.Web.Security.DefaultAuthenticationModule
FileAuthorization 確認使用者有權存取要求的檔案。 System.Web.Security.FileAuthorizationModule
FormsAuthentication 支援使用表單驗證進行驗證。 System.Web.Security.FormsAuthenticationModule
OutputCache 支援輸出快取。 System.Web.Caching.OutputCacheModule
設定檔 使用 ASP.NET 設定檔來管理使用者設定檔,該設定檔會儲存和擷取資料來源中的使用者設定,例如資料庫。 System.Web.Profile.ProfileModule
RoleManager 管理目前使用者的 RolePrincipal 實例。 System.Web.Security.RoleManagerModule
工作階段 支援維護會話狀態,其可儲存伺服器上應用程式內單一用戶端特有的資料。 System.Web.SessionState.SessionStateModule
UrlAuthorization 根據使用者名稱或使用者為成員的角色清單,判斷目前使用者是否允許存取要求的 URL。 System.Web.Security.UrlAuthorizationModule
UrlMappingsModule 支援將實際 URL 對應至更方便使用的 URL。 System.Web.UrlMappingsModule
WindowsAuthentication 在啟用 Windows 驗證 (Authentication) 時,設定 ASP.NET 應用程式的使用者識別。 System.Web.Security.WindowsAuthenticationModule

IIS 中的要求處理

在 IIS 中,IIS 和 ASP.NET 要求管線結合,以整合方法處理要求。 新的要求處理架構是由原生和 Managed 模組的已排序清單所組成,這些模組會執行特定工作以回應要求。

此設計提供舊版 IIS 的數個優點。 首先,所有檔案類型都可以使用原本僅供 Managed 程式碼使用的功能。 例如,您現在可以針對靜態檔案、Active Server Pages (ASP) 檔案,以及網站和應用程式中所有其他檔案類型,使用 ASP.NET 表單驗證和統一資源定位 (器 URL) 授權。

其次,此設計可消除 IIS 和 ASP.NET 中數項功能的重複。 例如,當用戶端要求受控檔案時,伺服器會呼叫整合管線中的適當驗證模組來驗證用戶端。 在舊版的 IIS 中,這個相同的要求會在 IIS 管線和 ASP.NET 管線中通過驗證程式。

第三,您可以在一個位置管理所有模組,而不是在 IIS 和 ASP.NET 組態中管理某些功能。 這可簡化伺服器上的月臺和應用程式管理。

IIS 中的應用程式集區

應用程式集區會依進程界限分隔應用程式,以防止應用程式影響伺服器上的另一個應用程式。 在 IIS 7 和更新版本中,應用程式集區會繼續使用 IIS 6.0 背景工作進程隔離模式。 此外,您現在可以指定一個設定,決定如何處理涉及受控資源的要求:整合模式或傳統模式。

注意

在 IIS 6.0 中,背景工作進程隔離模式和 IIS 5.0 隔離模式是在伺服器層級設定。 這讓無法在相同的伺服器上執行這兩種隔離模式。 不過,在 IIS 7 和更新版本中,整合模式和傳統模式是在應用程式集區層級設定,這可讓您在相同伺服器上的不同進程模式的應用程式集區中同時執行應用程式。

整合式應用程式集區模式

當應用程式集區處於整合模式時,您可以利用 IIS 和 ASP.NET 的整合式要求處理架構。 當應用程式集區中的背景工作進程收到要求時,要求會通過已排序的事件清單。 每個事件都會呼叫必要的原生和 Managed 模組,以處理要求的部分,並產生回應。

在整合模式中執行應用程式集區有數個優點。 首先,IIS 的要求處理模型和 ASP.NET 會整合到統一的進程模型中。 此模型會排除先前在 IIS 和 ASP.NET 中重複的步驟,例如驗證。 此外,整合模式可讓受控功能適用于所有內容類型。

傳統應用程式集區模式

當應用程式集區處於傳統模式時,IIS 7 和更新版本會以與 IIS 6.0 背景工作進程隔離模式相同的方式處理要求。 ASP.NET 要求會先完成 IIS 中的原生處理步驟,然後路由至 Aspnet_isapi.dll,以在 Managed 執行時間中處理 Managed 程式碼。 最後,要求會透過 IIS 路由傳回以傳送回應。

這個 IIS 和 ASP.NET 要求處理模型區隔會導致某些處理步驟重複,例如驗證和授權。 此外,受控程式碼功能,例如表單驗證,僅適用于 ASP.NET 應用程式或應用程式,這些應用程式已對應aspnet_isapi.dll所要處理的所有要求。

在將生產環境升級至 IIS 7 和更新版本之前,請務必先測試現有的應用程式是否相容,並將應用程式指派給整合模式中的應用程式集區。 如果應用程式無法在整合模式中運作,您應該只在傳統模式中將應用程式新增至應用程式集區。 例如,您的應用程式可能會依賴從 IIS 傳遞至受控執行時間的驗證權杖,而且由於 IIS 7 和更新版本中的新架構,進程會中斷您的應用程式。

IIS 中的 HTTP 要求處理

IIS 7 和更新版本具有與 IIS 6.0 類似的 HTTP 要求處理流程。 本節中的圖表提供處理中 HTTP 要求的概觀。

下列清單描述圖 1 所示的要求處理流程:

  1. 當用戶端瀏覽器起始 Web 服務器上的資源的 HTTP 要求時,HTTP.sys攔截要求。
  2. HTTP.sys連絡人 WAS,以從組態存放區取得資訊。
  3. WAS 會從組態存放區要求組態資訊,applicationHost.config。
  4. WWW 服務會接收組態資訊,例如應用程式集區和月臺設定。
  5. WWW 服務會使用組態資訊來設定HTTP.sys。
  6. WAS 會針對提出要求的應用程式集區啟動背景工作進程。
  7. 背景工作進程會處理要求,並傳回對HTTP.sys的回應。
  8. 用戶端會收到回應。

圖表顯示核心模式中的用戶端與使用者模式中的元素互動,如上所述。

圖 1:HTTP 要求概觀

在背景工作進程中,HTTP 要求會通過 Web Server Core 中的數個已排序步驟,稱為事件。 在每個事件中,原生模組會處理要求的一部分,例如驗證使用者或將資訊新增至事件記錄檔。 如果要求需要受控模組,原生 ManagedEngine 模組會建立 AppDomain,其中 Managed 模組可以執行必要的處理,例如使用 Forms 驗證來驗證使用者。 當要求通過 Web Server Core 中的所有事件時,回應會傳回至HTTP.sys。 下圖 2 顯示輸入背景工作進程的 HTTP 要求。

此圖顯示背景工作進程,其中包含連結到 AppDomain 之原生模組的 Web Server Core。

圖 2:背景工作進程內 HTTP 要求的詳細資料