瞭解 IIS 7 上的月臺、應用程式和虛擬目錄

作者:Reagan Templin

簡介

在 IIS 中,您可以建立網站、應用程式和虛擬目錄,以透過網際網路、內部網路或外部網路與使用者共用資訊。 雖然這些概念存在於舊版 IIS 中,但 IIS 7 和更新版本中的數項變更會影響這些概念的定義和功能。 最重要的是,網站、應用程式和虛擬目錄現在會以階層式關聯性一起運作,作為裝載線上內容並提供線上服務的基本建置組塊。

本文提供 IIS 6.0 中應用程式的快速概觀,讓您進一步瞭解 IIS 7 中引進的差異。 接著,它會說明 IIS 中月臺、應用程式和虛擬目錄的概念,並介紹組 <sites> 態中的一節。

關於 IIS 6.0 中的網站、應用程式和虛擬目錄

在 IIS 6.0 中,虛擬目錄和應用程式的概念令人困惑。 雖然它們被討論為個別的概念,但 (與功能觀點的概念不同) ,但應用程式不是虛擬目錄的實際個別物件。 在 IIS 6.0 中,應用程式實際上只是一個虛擬目錄,其中包含中繼基底中的下列屬性組合: AppFriendlyNameAppRootAppIsolatedAppPoolID

注意

網站根目錄是例外狀況,因為即使未設定這些屬性,也隱含地將其視為應用程式。

應用程式對 IIS 而言比擴充 Web 服務器功能的技術還少,例如 Active Server Pages (ASP) 、Internet Server Application Programming Interface (ISAPI) ,以及 ASP.NET。 這些技術為裝載于 IIS 6.0 的應用程式提供額外的功能和處理,並讓開發人員能夠建立更複雜的應用程式。 IIS 6.0 的重要問題在於隔離這類應用程式,以防止某個應用程式集區中的應用程式影響伺服器上另一個應用程式集區中的應用程式。

關於 IIS 7 和更新版本中的網站、應用程式和虛擬目錄

IIS 7 和更新版本會正式化網站、應用程式和虛擬目錄的概念。 虛擬目錄和應用程式現在是個別的物件,而且它們存在於 IIS 組態架構中的階層式關聯性中。 簡單來說,網站包含一或多個應用程式、應用程式包含一或多個虛擬目錄,而虛擬目錄會對應至電腦上的實體目錄。

如同 IIS 6.0,網站包含與該網站相關聯的所有內容,包括靜態和動態。 不過,每個網站必須至少包含一個應用程式,其名稱為根應用程式。 而且每個應用程式 (包括根應用程式) 必須至少包含一個虛擬目錄,也就是根虛擬目錄。 這些物件會一起運作,以形成網站。

此外,在 IIS 7 和更新版本中,應用程式的概念現在對 IIS 和擴充 IIS 功能的技術具有意義。 應用程式是伺服器在執行時間很重要的物件。 這是因為 IIS 和 ASP.NET 要求處理管線已合併在 IIS 7 和更新版本中,讓內容可以利用先前只提供給 Managed 程式碼應用程式的功能。 例如,每個 Managed 程式碼應用程式都會在應用程式域 (AppDomain) 中執行。 應用程式可以有數個虛擬目錄,每個目錄都會由與其所屬應用程式相同的 AppDomain 提供服務。

下列各節將更詳細地說明網站、應用程式、虛擬目錄及其相關設定。

網站

月臺是應用程式和虛擬目錄的容器,您可以透過一或多個唯一的系結加以存取。

系結包含兩個對通訊很重要的屬性:系 結通訊協定系結資訊。 系結通訊協定會定義伺服器與用戶端之間通訊的通訊協定。 系結資訊會定義用來存取網站的資訊。 例如,網站的系結通訊協定可以是 HTTP 或 HTTPS,而系結資訊是 IP 位址、埠和選擇性主機標頭的組合。

如果月臺需要不同的通訊協定或系結資訊,網站可能會包含一個以上的系結。 在舊版的 IIS 中,只支援 HTTP 和 HTTPS 通訊協定。 例如,網站在網站區段需要透過 HTTPS 進行安全通訊時,可能會有 HTTP 系結和 HTTPS 系結。

在 IIS 7 和更新版本中,系結可以套用至任何通訊協定。 Windows Process Activation Service (WAS) 是新的服務,可讓 IIS 使用其他通訊協定。 此服務會保留熟悉的 IIS 6.0 進程模型,例如應用程式集區和訊息型進程啟用,以及裝載功能,例如快速失敗保護、健康情況監視和回收。 不過,WAS 會從啟用架構中移除 HTTP 的相依性。 這適用于透過標準通訊協定在 Web 服務中提供應用程式對應用程式通訊的技術。 Windows Communication Foundation (WCF) 程式設計模型是一種這類技術,可透過傳輸控制通訊協定的標準通訊協定 (TCP) 、Microsoft Message Queuing (MSMQ) 和具名管道進行通訊。 這可讓使用通訊協定的應用程式利用 IIS 功能,例如進程回收、快速失敗保護,以及先前僅適用于 HTTP 型應用程式的組態。 如需 WCF 程式設計模型的詳細資訊,請參閱 MSDN 上的 Windows Communication Foundation

除了包含包含虛擬目錄的應用程式 () 和指定系結之外,下列組態設定也屬於月臺:

  • 限制:設定設定以限制頻寬數量、連線數目,或月臺連線所允許的時間量。
  • 記錄:設定用於處理和儲存月臺記錄檔的設定。
  • 失敗的要求追蹤記錄:設定網站記錄失敗要求追蹤的設定。

應用程式

應用程式是一組檔案,可傳遞內容或透過通訊協定提供服務,例如 HTTP。 當您在 IIS 中建立應用程式時,應用程式的路徑會成為網站 URL 的一部分。

在 IIS 7 和更新版本中,每個網站都必須有名為根應用程式的應用程式,或預設應用程式。 不過,網站可以有多個應用程式。 例如,您可能有一個有數個應用程式的線上商務網站,例如購物車應用程式,可讓使用者在購物期間收集項目,以及一個登入應用程式,讓使用者在購買時重新叫用已儲存的付款資訊。

除了屬於月臺之外,應用程式還屬於應用程式集區,它會將應用程式與伺服器上的其他應用程式集區中的應用程式隔離。 在 Managed 程式碼應用程式中,請務必將您的應用程式與執行應用程式所需的.NET Framework版本的應用程式集區建立關聯。

如本文的 [月臺] 區段所述,IIS 預設支援 HTTP 和 HTTPS,但您可以使用其他通訊協定。 針對每個網站,您可以指定一或多個系結來與網站中的內容通訊及存取內容。 若要讓應用程式使用父月臺系結中指定的通訊協定進行通訊,您必須啟用通訊協定。 若要這樣做,請在應用程式的 enabledProtocols 屬性中指定通訊協定,並確定您在伺服器上具有適當的接聽程式配接器,並在組態中的 <listenerAdapters> 區段中指定。

虛擬目錄

虛擬目錄是目錄名稱, (也稱為您在 IIS 中指定的路徑) ,並對應至本機或遠端伺服器上的實體目錄。 目錄名稱接著會成為應用程式 URL 的一部分,而且使用者可以從瀏覽器要求 URL 來存取實體目錄中的內容,例如網頁或其他目錄和檔案的清單。 如果您為虛擬目錄指定與實體目錄不同的名稱,使用者較難以探索伺服器上的實際實體檔案結構,因為 URL 不會直接對應至網站的根目錄。

在 IIS 7 和更新版本中,每個應用程式都必須有名為根虛擬目錄的虛擬目錄,並將應用程式對應至包含應用程式內容的實體目錄。 不過,應用程式可以有多個虛擬目錄。 例如,當您想要讓應用程式包含檔案系統中另一個位置的映射時,您可能會使用虛擬目錄,但您不想將映射檔案移至對應至應用程式根虛擬目錄的實體目錄。

根據預設,IIS 會使用虛擬目錄所對應的實體目錄中 Web.config 檔案的設定,以及該實體目錄中的任何子目錄所含檔案內的設定。 如果您不想在子目錄中使用Web.config檔案,請為虛擬目錄上的allowSubDirConfig屬性指定false

或者,當您需要指定認證和方法來存取虛擬目錄時,您可以指定 使用者名稱密碼logonMethod 屬性的值。

IIS 組態: <sites> 區段

請查看 IIS 7 和更新版本中的預設 <sites> 區段。 這是在 Windows Server® 2008 上安裝 IIS 之後,ApplicationHost.config檔案 (位於 %windir%\system32\inetsrv\config\) 。

<sites> 
    <site name="Default Web Site" id="1"> 
        <application path="/"> 
            <virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\wwwroot" /> 
        </application> 
        <bindings> 
            <binding protocol="http" bindingInformation="*:80:" /> 
        </bindings> 
    </site> 
    <siteDefaults> 
        <logFile logFormat="W3C" directory="%SystemDrive%\inetpub\logs\LogFiles" /> 
        <traceFailedRequestsLogging directory="%SystemDrive%\inetpub\logs\FailedReqLogFiles" /> 
    </siteDefaults> 
    <applicationDefaults applicationPool="DefaultAppPool" /> 
    <virtualDirectoryDefaults allowSubDirConfig="true" /> 
</sites>

當您在路徑欄位中看到單一 「/」 時,您知道這是根物件。 根據它位於應用程式或虛擬目錄區段中,它是根應用程式或根虛擬目錄。

預設元素

下一節列出 區段中的 <sites> 集合和元素,以及區段內的 <sites> 階層式關聯性。

<sites> section 
<site> collection 
<bindings> collection 
<binding> element 
<clear> element 
<limits> element 
<logFile> element 
<traceFailedRequestsLogging> element 
<application> collection 
<virtualDirectory> collection 
<virtualDirectoryDefaults> element 
<applicationDefaults> element 
<virtualDirectoryDefaults> element 
<siteDefaults> element 
<bindings> collection 
<binding> element 
<clear> element 
<limits> element 
<logFile> element 
<traceFailedRequestsLogging> element 
<applicationDefaults> element 
<virtualDirectoryDefaults> element

請注意,有兩個元素出現在多個位置: <applicationDefaults> 元素和 <virtualDirectoryDefaults> 元素。 另外還有一個 <siteDefaults> 元素,雖然它只會顯示一次,因為它只能在 區段中的一個位置設定 <sites> 。 預設元素很特殊,因為它們可讓您設定屬性的預設值,而不需要在每個集合中重複相同的值。

在多個層級設定屬性時,會使用最低層級的值。 例如,如果您在 區段和 <site> 集合中的元素 <sites><applicationDefaults> 指定預設值,則會使用集合中的 <site> 值。 此外,如果在預設專案和物件集合中設定相同的屬性或子專案,則會使用集合中的值。 例如,如果您在專案和集合中 <applicationDefaults><application> 設定屬性,則會使用集合中的 <application> 值。

下表指定可以設定元素的父元素 <applicationDefaults> ,並描述值對應用程式的影響。

父元素 Description
<sites> 區段 指定伺服器上所有應用程式的預設設定。
<site> 集合 指定父網站中所有應用程式的預設設定。

下表指定可以設定元素的父元素 <virtualDirectoryDefaults> ,並描述值對虛擬目錄的影響。

父元素 Description
<sites> 區段 指定伺服器上所有虛擬目錄的預設設定。
<site> 集合 指定父月臺中所有虛擬目錄的預設設定。
<application> 集合 指定父應用程式中所有虛擬目錄的預設設定。

摘要

您現在應該已進一步瞭解 IIS 7 和更新版本中的網站、應用程式和虛擬目錄。 不同于 IIS 6.0,應用程式和虛擬目錄在組態中會變成不同的物件,這會醒目提示它們對 Web 服務器及其與網站的關聯性。 此外,月臺現在可以包含使用 HTTP 和 HTTPS 以外的通訊協定的應用程式,其可擴充月臺功能,同時保留 IIS 6.0 中引進的進程模型優點。

如需 WAS 和 IIS 架構的詳細資訊,請參閱 IIS.NET 上的 IIS Request-Processing架構。 如需本文所討論之組態設定的詳細資訊,請參閱 MSDN 上的 IIS 7 設定架構