了解 IIS 7 上的網站、應用程式與虛擬目錄

作者 :雷根·坦普林

簡介

在 IIS 中,你可以建立網站、應用程式和虛擬目錄,透過網際網路、內聯網或外聯網與使用者分享資訊。 雖然這些概念在早期版本的 IIS 中已存在,但 IIS 7 及以上版本的多項變更影響了這些概念的定義與功能。 最重要的是,網站、應用程式與虛擬目錄現在以階層式關係協同運作,成為承載線上內容與提供線上服務的基本基石。

本文簡要介紹 IIS 6.0 的應用,讓你更了解 IIS 7 所引入的差異。 接著說明 IIS 中站點、應用程式與虛擬目錄的概念,並介紹 <sites> 該部分的配置。

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

在 IIS 6.0 中,虛擬目錄與應用程式的概念令人困惑。 雖然它們被討論為不同的概念(且在功能層面上概念不同),應用程式並非物理上與虛擬目錄分離的物件。 在 IIS 6.0 中,應用程式實際上只是一個虛擬目錄,元資料庫中包含以下屬性之一或組合: AppFriendlyNameAppRootAppSolatedAppPoolID

備註

網站根節點是例外,因為它被隱含地視為應用程式,即使這些屬性未被設定。

對 IIS 來說,應用程式的重要性不如擴展網頁伺服器功能的技術重要,例如主動伺服器頁面(ASP)、網際網路伺服器應用程式介面(ISAPI)及 ASP.NET。 這些技術為 IIS 6.0 中託管的應用程式提供了額外功能與處理,並使開發者能夠建立更複雜的應用程式。 IIS 6.0 的重要問題是如何隔離這類應用程式,防止一個應用程式池中的應用程式影響伺服器上另一個應用池的應用程式。

關於 IIS 7 及以上的網站、應用程式與虛擬目錄

IIS 7 及以上版本正式化了網站、應用程式與虛擬目錄的概念。 虛擬目錄與應用程式現在是獨立的物件,並以 IIS 配置架構中的階層關係存在。 簡言之,一個網站包含一個或多個應用程式,應用程式包含一個或多個虛擬目錄,而虛擬目錄則對應到電腦上的實體目錄。

如同 IIS 6.0,網站包含所有與該網站相關的靜態與動態內容。 然而,每個網站必須至少包含一個應用程式,稱為根應用程式。 每個應用程式(包括根應用程式)必須至少包含一個虛擬目錄,稱為根虛擬目錄。 這些物件共同作用形成這個遺址。

此外,在 IIS 7 及以上階段,應用程式的概念現在對 IIS 及其擴展功能的技術都有意義。 應用程式是伺服器執行時重要的物件。 這是因為 IIS 與 ASP.NET 請求處理管線在 IIS 7 及以上版本中已合併,內容能利用先前僅為受管程式碼應用程式提供的功能。 例如,每個受管理程式碼應用程式都運行於一個應用程式域(AppDomain)。 一個應用程式可以有多個虛擬目錄,每個目錄都會由其所屬應用程式相同的應用程式域服務。

以下章節將更詳細說明網站、應用程式、虛擬目錄及其相關配置。

Sites

網站是應用程式和虛擬目錄的容器,你可以透過一個或多個獨特的綁定來存取它。

綁定包含兩個對通訊很重要的屬性: 綁定協議綁定資訊。 綁定協定定義了伺服器與用戶端之間進行通訊的協定。 綁定資訊定義了用於存取該網站的資訊。 例如,網站的綁定協定可以是 HTTP 或 HTTPS,綁定資訊則是 IP 位址、埠碼和可選的主機標頭的組合。

若一個網站需要不同的協議或結合資訊,則可能包含多個綁定。 在早期版本的 IIS 中,僅支援 HTTP 和 HTTPS 協定。 例如,當網站某些區域需要透過 HTTPS 安全通訊時,網站可能同時擁有 HTTP 綁定和 HTTPS 綁定。

在IIS 7及以上階段,綁定可適用於任何協議。 Windows 程序啟動服務(WAS)是新服務,使 IIS 能夠使用額外協定。 此服務保留了熟悉的 IIS 6.0 流程模型,例如應用程式池與基於訊息的程序啟動,以及託管功能,如快速故障保護、健康監控與回收。 然而,WAS 移除了啟用架構中對 HTTP 的依賴。 這對於在網路服務中透過標準協定提供應用對應用通訊的技術非常有用。 Windows 通訊基礎(WCF)程式設計模型就是其中一種技術,能夠透過傳輸控制協定(TCP)、Microsoft訊息佇列(MSMQ)及命名管道等標準協定進行通訊。 這使得使用通訊協定的應用程式能利用 IIS 功能,例如程序回收、快速故障保護及設定,這些先前僅供基於 HTTP 的應用程式使用。 欲了解更多關於 WCF 程式設計模型的資訊,請參閱 MSDN 上的 Windows 通訊基金 會。

除了包含應用程式(包含虛擬目錄)及指定綁定外,以下設定屬於該網站:

  • 限制:設定以限制頻寬、連線數量或連接至站點的時間。
  • 日誌:設定網站日誌檔案的處理與儲存。
  • 失敗的請求追蹤日誌:設置記錄網站失敗請求追蹤的設定。

應用程式

應用程式是一組透過協定(如 HTTP)傳遞內容或提供服務的檔案。 當你在 IIS 中建立應用程式時,該應用程式的路徑會成為網站網址的一部分。

在 IIS 7 及以上版本中,每個站點必須有一個名為根應用程式或預設應用程式的應用程式。 然而,一個網站可以有多個應用程式。 舉例來說,你可能有一個線上商務網站,裡面有多種應用程式,例如購物車應用程式讓使用者在購物時能收集物品,以及登入應用程式,讓使用者在購物時能回憶已儲存的付款資訊。

除了屬於一個站點外,應用程式還屬於一個應用程式池,該池將該應用程式與伺服器上其他應用程式池中的應用程式隔離開來。 對於管理程式碼應用程式,務必將你的應用程式與執行該應用程式所需 .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> 部分。 這是安裝 IIS 在 Windows Server® 2008 後,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> 一個位置配置。 預設元素之所以特別,是因為它們讓你能設定屬性的預設值,而不必在每個集合中重複相同的值。

當屬性設定於多個層級時,會使用最低層級的值。 例如,如果你在該區段和<applicationDefaults>集合的元素<sites>中都指定預設值<site>,則會使用該<site>集合的值。 此外,若同一屬性或子元素同時設定在預設元素與物件集合中,則集合中的值會被使用。 例如,如果你在<applicationDefaults>元素和<application>集合中設定屬性,將會使用<application>集合中的值。

下表說明元素可由哪些父元素 <applicationDefaults> 配置,並描述這些值對應用的影響。

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

下表說明元素可由哪些父元素 <virtualDirectoryDefaults> 配置,並描述這些值對虛擬目錄的影響。

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

總結

你現在應該對 IIS 7 及以上的網站、應用程式和虛擬目錄有更深入的了解。 與 IIS 6.0 不同,應用程式與虛擬目錄在設定上已成為獨立的物件,凸顯它們對網頁伺服器的獨特用途及其與網站的關聯。 此外,網站現在可以包含使用非 HTTP 和 HTTPS 協定的應用程式,這在保留 IIS 6.0 引入的流程模型優勢的同時,擴展了網站功能。

欲了解更多關於 WAS 與 IIS 架構的資訊,請參閱 IIS Request-Processing 架構於 IIS.NET。 欲了解更多本文討論的設定設定,請參閱 MSDN 上的 IIS 7 設定架構