特別報導:Windows Server 2008

IIS 7.0 入門

Isaac Roybal

 

摘要:

  • IIS 7.0 架構變更
  • 管理 IIS 7.0
  • 回溯相容性
  • IIS 7.0 疑難排解

IT 工作室各不相同,每個都有自己的需求和目標,尤其是在主控網站或服務方面。為了滿足組織的需求,網頁伺服器可能需要填東補西,更別提把相同的配方應用在多部伺服器上,

又要同時有效地管理它們所帶來的挑戰。IIS 7.0 中一些重大的變更,就是要協助 IT 工作室在建置網頁伺服器或 Web 伺服陣列時達成這樣的目標。

在逐一掃視 IIS 7.0 中所有的重要功能後,我對於能與您分享這些功能的細節是滿心雀躍。當我發現無法在本文一一細述後,我決定把重點集中在 IIS 7.0 中一些最顯著的功能和重大的變更上。如需詳細資訊,請造訪 IIS.net 上的 IIS 社群網站。

全新架構

IIS 7.0 中的核心變更與架構、要求處理、PHP 應用程式架構支援和設定存放區有關。在 IIS 6.0 中,功能基本上是全有或全無。您必須安裝所有的功能,而且只能使用 ISAPI 來自訂 IIS。

建置 IIS 的前提,是讓網站管理員從一組基本的功能開始著手,之後再針對他的環境所需分層加上其他必要的功能。您最了解自己的環境,因此 IIS 7.0 提供您建置組塊讓您建立自己的自訂網頁伺服器。這麼做可以減輕您的系統管理負擔,因為這可縮小伺服器的受攻擊面,並且無須更新不用的元件。此套新作法的關鍵在於 IIS 7.0 的模組化架構。

IIS 7.0 具有嶄新的設計可讓您選擇要安裝在伺服器上的功能 (亦稱為模組)。這些模組會直接掛入整合式要求管線。這個全新的模組化設計有幾項優點,包括縮小受攻擊面和減少網頁伺服器數目。

IIS 目前有 40 個預設模組 — 例如,基本、匿名和 Windows® 驗證現在都是個別的模組,可獨立地加入要求管線。為了方便分類,模組分成八個子類別 (見 [圖 1])。

[圖 1] IIS 7.0 模組分成八個功能區域

[圖 1]** IIS 7.0 模組分成八個功能區域 **(按影像可放大)

這表示您現在能夠建置一個完全為您的環境量身訂做的自訂網頁伺服器。但若是 40 個預設模組沒有提供您要的功能,像是自訂驗證或內容修改程式怎麼辦呢?沒問題,您可以使用機器碼或 Managed 程式碼編寫模組,來滿足這項需要,然後將它直接掛入管線中。這也可讓 Microsoft 個別編寫和發行新模組,如此一來,您就不用苦等下一次 Service Pack 或主要的產品發行版。IIS 7.0 可讓您以自己的自訂模組來覆寫 40 個預設模組中的任何一個。如需有關如何建置您自己的模組的詳細資訊,請參閱 IIS.net。

整合式要求管線

您可以把整合式要求管線想成是每次提供頁面時必須採取的一組基本線性步驟 (如 [圖 2] 所示)。一般來說,一定要進行某種驗證,隨後授權以擷取內容,判定和執行該內容所需的處理常式,進行任何必要的記錄作業,最後是傳送回應。 整合式要求管線讓 IIS 7.0 具備同時執行不同應用程式架構的彈性。例如,您可以在同一管線內以自訂記錄模組在 PHP 內容上執行表單驗證。

[圖 2] IIS 7.0 整合式管線和模組

[圖 2]** IIS 7.0 整合式管線和模組 **(按影像可放大)

伺服器上的每個網站都有整合式要求管線,而且可以在兩種模式之一當中執行:[整合式] 和 [傳統]。[整合式] 是預設模式,容許在管線中掛入特定的功能,讓您細微地控制要求處理序。[傳統] 模式透過 ISAPI 模組在管線中重新產生 IIS 6.0/ISAPI 功能,來保持相容。這在將應用程式移轉至 IIS 7.0 時相當有用。

預設安裝

現在讓我們來討論一下要怎麼設立您全新的模組化網頁伺服器。看一下 IIS 7.0 的預設安裝,您會發現其中只包含 10 個模組 (如果把 Windows 處理程序啟動服務包含在內的話)。在安裝網頁伺服器角色時,IIS 7.0 安裝程式會提供 IIS 的基本功能,特別是只包括提供靜態內容 (像是純 HTML 或傳統 ASP) 所需的模組。在這之後,要在伺服器上安裝什麼全由您自己決定。下面是預設安裝所含的功能:

  • 常見 HTTP 功能,包括靜態內容、預設文件、目錄瀏覽和 HTTP 錯誤
  • 健康情況和診斷功能,例如 HTTP 記錄和要求監視器
  • 安全性功能,例如要求篩選
  • 效能功能,例如靜態內容壓縮
  • 管理工具,包括 IIS 管理主控台
  • Windows 處理程序啟動服務

如您所見,這是最基本的伺服器,不含 ASP.NET 或其他 IIS 7.0 新功能,像是診斷和疑難排解功能。要在伺服器上啟用其他功能,例如傳送如 ASP.NET 和 FastCGI (PHP) 的動態內容,其實很簡單。只要在 Windows Server® 2008 伺服器管理員內,從網頁伺服器角色的 [新增角色服務] 選取要安裝的模組就行了。

全新的設定存放區

IIS 7.0 中另一個可讓您的生活更輕鬆的重要變更,是全新的設定存放區。為了達到回溯相容性而提供選擇性安裝的元件 Metabase,現在已由 XML 設定系統取代。我知道您一定會大叫:「但是 Metabase 不就是 XML 嗎!」沒錯,但是它既難處理又不容易閱讀 (至少一般人看不太懂)。它已由一套比較富有彈性的 XML 系統取代。就跟 ASP.NET 一樣,IIS 7.0 也使用 .config 檔案 — 簡潔、可攜又容易閱讀的 .config 檔案。

改採這種格式意謂著設定系統現在不受機器控制,與鍵入個別機器的 Metabase 截然不同。因此,您現在便能輕鬆地透過簡單的拖放動作或 xcopy,將設定系統移植到其他系統,隨您到處跑。

這套全新的設定系統也利用 IIS 7.0 中一項稱為「共用設定」的新功能,在 Web 伺服陣列達到不可思議的成效。由於這套全新的設定系統具備可攜性,您可以將一個主要 .config 檔案在伺服陣列中的所有節點間共用。共用設定可讓您匯出已知具備良好狀態的生產前伺服器的設定,然後將它共用於您的生產或「實際執行」環境中。

匯出 .config 檔案時,您還必須一起附上加密金鑰密碼。這可保護 .config 檔案預防惡意的網頁伺服器試圖在沒有授權的情況下模擬您伺服器的 .config 檔案。

啟用共用設定很簡單,只要在 IIS 管理員的伺服器節點中,選取位於工作窗格的 [管理] 區段下的 [共用設定]。選取 [啟用共用設定],提供要共用之設定的實體路徑 (這一般是 UNC 共用),輸入存取實體路徑所需的憑證,然後按 [套用] 就行了。找到 .config 檔案時,系統會提示您輸入它的加密密碼。這個程序完成後,請重新啟動 IIS 管理員,它就會採用新的 .config 檔案。

新設定系統的結構跟您所習慣的大不相同,讓我們來看一下其中的基本內容。如 [圖 3] 所示,IIS 7.0 的設定已化分成兩種類別,即全伺服器設定和站台特定設定。所有的伺服器端設定都是存放在 applicationhost.config 中,此檔案位於 %systemroot%\windows\system32\inetsrv\config。這當中包括所有已安裝的模組、伺服器上的站台等等。站台特定設定則是存放在個別的 web.config 檔案。

[圖 3] 全伺服器設定有個 .config 檔案,而伺服器上的每個網站都有各自不同的檔案。

[圖 3]** 全伺服器設定有個 .config 檔案,而伺服器上的每個網站都有各自不同的檔案。 **(按影像可放大)

如果您曾用過 ASP.NET,可能比較熟悉 web.config 檔案。IIS 7.0 使用 web.config 檔案來存放個別站台特定的設定,例如站台的預設文件和應用程式設定,還有 ASP.NET 設定。這表示您伺服器上的每個站台都有一個 web.config 檔案。

站台的 web.config 檔案是位於站台的實體路徑中,例如 %systemroot%\inetpub\wwwroot。這種設計也提供像前文所述的可攜性優點,不過是在站台層級。比方說,您可以輕鬆地在測試伺服器上開發一個站台,然後直接將該站台的 web.config 和應用程式檔案拖放或 xocopy 到生產伺服器。

每次移植或共用 .config 檔案時,請特別注意電腦特定的資訊,像是 IP 位址和磁碟機代號。IIS 7.0 支援 OS 環境變數 (例如 %systemroot%),來應付這類疏忽。另外也請確保測試和生產伺服器上安裝了相同一組的模組。這有助於避免不預期的應用程式錯誤。如果 web.config 參考到尚未安裝的模組,或是預設模組與自訂模組相衝突,也可能會發生錯誤。

管理網頁伺服器

現在有了這部卓越、全新、可自訂、富彈性又可攜的網頁伺服器, 要怎麼管理它呢?管理工作是規劃和建置 IIS 7.0 相當重要的一環,而處理系統管理的雜務有好幾種方法。

管理喜好設定一般不出三種類別:從 UI 進行點擊執行管理,在命令列輸入命令,以及撰寫指令碼盡可能自動化。讓我們先從 UI 談起。

在 IIS 6.0 中,Microsoft® Management Console (MMC) 嵌入式管理單元的 UI 有兩個基本、常見的檢視,即樹狀檢視和標籤式檢視。若要切入設定,可按一下滑鼠右鍵,選取 [內容],然後就會顯示一堆索引標籤,當然還有選項按鈕和核取方塊。

好消息是,IIS 7.0 中的 UI 已徹底改頭換面。這個 UI 的設計是採取工作導向的方法,稱為「IIS 管理員」,如 [圖 4] 所示。另外還有適用於下層用戶端 (例如 Windows XP 和 Windows Server 2003) 的「遠端管理員 (Remote Manager)」。您可以透過 IIS.net/downloads 下載它。

[圖 4] IIS 7.0 中的新 UI

[圖 4]** IIS 7.0 中的新 UI **(按影像可放大)

全新的使用者介面左方有 [連線] 窗格,右方有 [執行] 窗格,而中間是工作窗格或工作空間。左方的連線管理員樹狀結構類似於 IIS 6.0 的樹狀檢視,都有父節點和子節點。您可以建立新連線、儲存目前連線或刪除現有連線,這些都是樹狀檢視所沒有的新功能。工作窗格是 UI 最明顯的改進部分,有兩個檢視可以使用。功能檢視將 IIS 所有可設定的屬性從舊式「標籤式」檢視取出,並將它們依系統管理區域分組,例如 IIS、管理和安全性。

ASP.NET 屬性也已整合至 IIS 管理員中,而不必再使用多餘的 MMC 嵌入式管理單元。每個可設定的屬性都有自己的圖示,方便您尋找。而且因為 IIS 管理員是當作 Windows Form 應用程式建置而成,所以您可以輕易地為您所寫的任何自訂模組或功能加入外掛圖示。

工作窗格的第二個檢視是內容檢視,這與 IIS 6.0 極為雷同之處在於,您可以查看站台的內容目錄裡面有什麼內容,然後對該內容執行動作。這裡的新功能是,您可以選取特定的內容 (例如特定的網頁),然後切換到功能檢視來叫用選定內容上的特定設定,以便更細微地往下控制頁面層級。

其他管理方式

對於比較偏好使用命令列的人,有一個功能強大的新工具,叫做 APPCMD.exe,它可讓您執行簡單的工作,例如停止站台或備份目前的 .config 檔案,以及較為複雜的工作,例如搜尋設定的結構描述。語法相當簡單:

APPCMD (command) (object-type) <identifier> </parameter1:value1 ...>. 

TolistallobjectsavailabletoAPPCMD,type:

APPCMD /? 

或者,如果您想要查看特定物件類型的可用命令,可輸入:

APPCMD (object-type) /?

針對所有程式碼作者,IIS 7.0 新增了 Managed 程式碼 API,稱為 Microsoft.Web.Administration,以及全新的 Windows Management Instrumentation (WMI) 提供者。這兩種方法都開放了無數選項,讓您透過指令碼處理、自動化和撰寫工具的方式來管理 IIS 7.0。兩者都可與 Windows PowerShell® 搭配使用,而 WMI 提供者也可與 VBScript 和 JScript® 搭配使用。如需詳細資訊,請參閱 blogs.msdn.com/carlosag/archive/2006/04/17/MicrosoftWebAdministration.aspx

遠端管理和委派管理

IIS 7.0 提供全新的方法讓您遠端管理伺服器、站台、Web 應用程式,以及安全地委派非系統管理員的系統管理權限。讓我們先來討論一下全新的遠端管理功能,以及它們如何減輕您的負擔。

在過去,遠端管理 IIS 伺服器有兩種方法:使用遠端管理網站,或使用遠端桌上型電腦/終端機服務來存取 UI。但若您是位於防火牆之外或是離站,這些選項就沒那麼有用。IIS 7.0 所採取的對策,是將遠端管理功能直接建置到 UI 當中,這樣 UI 就可以透過與防火牆互動的 HTTPS 運作。

IIS 7.0 中的遠端管理在好幾方面可減輕您的工作負擔。首先,您所獲得的 UI 體驗就跟登入本機一樣。其次是不用開啟防火牆上的連接埠,因為通訊是透過 HTTPS 進行。最後,您現在可以從單一 UI 管理數部伺服器。而不需要同時開啟好幾個遠端桌面或遠端網站視窗。

IIS 7.0 中實際的遠端管理服務,基本上是一個小型 Web 應用程式,它是在 Windows NT® 本機服務帳戶 (稱為 NT Service\WMSVC) 下以個別的服務執行。這種設計可在 IIS 伺服器本身沒有回應時仍舊保有遠端管理功能。

就跟 IIS 7.0 中大部分功能一樣,基於安全性考量,預設並不會安裝遠端管理。若要安裝遠端管理功能,可在 Windows Server 2008 伺服器管理員 (可在 [管理工具] 裡面找到) 中,為網頁伺服器角色新增角色服務。安裝好這項功能後,您還必須啟用遠端連線並啟動 WMSVC 服務,因為它預設是處於停止狀態。

WMSVC 服務的預設啟動設定是手動。如果您希望該服務在重新開機後自動啟動,就必須將設定變更為自動。您可以透過命令列進行這項作業,只要輸入:

sc config WMSVC start=auto

當透過管理服務啟用遠端連線時,您會看到一份設定清單,例如識別認證、連線和 IPV4 位址限制。此時最重要的決策是判定要將連線到 IIS 7.0 的權限授與哪一組識別認證:僅 Windows 認證或是 Windows 和 IIS 管理員認證。

第一個選項很明顯是指您只想允許 Windows 使用者帳戶,無論是本機或網域。第二個選項則包括 Windows 使用者和 IIS 7.0 中與 Windows 使用者帳戶無關的全新帳戶類型:IIS 管理員使用者。透過 IIS 管理員使用者,系統管理員能夠建立只在 IIS 7.0 內容中已知且無法存取 OS 的使用者帳戶。最後,根據預設,IIS 還提供自我簽署認證讓您著手進行,但是建議您加入有效的已簽署 SSL 認證。現在只要套用您的設定,然後啟動服務就大功告成了。

為了提高控制能力及安全性,IT 系統管理員可以安全地委派各個站台或 Web 應用程式的系統管理工作給非系統管理員。

委派的系統管理基本上是遠端管理,但它會限制個別站台或 Web 應用程式的存取範圍。「IIS 管理員使用者」功能在這裡特別管用,您可以為這些僅此一次的站台擁有者建立 IIS 使用者,並委派權限給他們,讓他們管理自己的站台或應用程式。他們並無法存取全伺服器設定,而且只受限於存取他們特定的站台或 Web 應用程式。

您也可以指定使用者能夠變更的功能和設定,甚至指定哪些要顯示在 UI 中。舉例來說,假如您不希望某人變更他站台所使用的驗證類型,您可以將該功能設定為唯讀或不可繼承。當某功能是唯讀時,使用者仍然可以存取該功能並確定設定,但不能進行變更,而對於不可繼承的設定,該功能不會出現在委派的使用者 IIS 管理員檢視中。這類的功能委派可讓您在不提供網頁伺服器的系統管理控制權的情況下,嚴格控制其他人的存取權。

邁向 IIS 7.0

IIS 小組在設計 IIS 7.0 時,希望能夠藉著讓您利用現有的管理工具投資和 IIS 6.0 的指令碼,使轉移的過程盡可能順暢。他們在 IIS 7.0 的回溯相容性方面尤其投入許多心力,使它能與您的 IIS 6.0 指令碼搭配運作。在安裝程序的 IIS 6.0 管理相容性節點下,其實有一整組的工具可以安裝 — 範圍從 IIS 6.0 Metabase 相容性到實際的 IIS 6.0 管理主控台,應有盡有。

IIS 6.0 Metabase 相容性基礎結構採用一個叫做 ADOMapper 的元件。它可讓您在全新的設定系統中執行 IIS 6.0 Admin Based Object (ABO) 和 ADSI (Active Directory 服務介面) Metabase 指令碼,使它侷限於 IIS 6.0 的功能。因此,它無法讀取或寫入新的 IIS 7.0 屬性,存取新的執行階段資料,或是讀寫 ASP.NET 屬性或 web.config 檔案。

疑難排解和診斷

疑難排解和診斷向來是耗時的差事。要在大型的 Web 伺服陣列甚或是單部伺服器中挖出記錄檔並試著重現問題並不容易。IIS 7.0 有項工具,稱為「失敗要求的追蹤」,有助於減輕這類的苦活,並減少浪費時間。它在很多情況下都很有用,包括當要求沒有回應或產生錯誤時,還有對於調查驗證和授權問題等。

失敗要求的追蹤使用追蹤規則作為搜尋錯誤的條件。您可以建立追蹤規則來尋找行為或錯誤的類型,方法是指定您想要追蹤的內容類型 (例如伺服器上的全部內容,僅 ASP.NET 內容,或是自訂內容,像是 PHP),以及應該開始追蹤的條件 (例如特定的傳回狀態代碼,提供頁面所花的時間,事件嚴重性,或各種組合)。

比如,假設使用者報告某站台載入的時間太長。如果您每個小時有上千次點閱,這是很難重現的案例。透過失敗要求的追蹤,您只要加入追蹤規則,在網頁花超過預期的時間載入時開始記錄 — 針對此例,我假設是兩秒 — 然後等伺服器自己重現問題就行了 (見 [圖 5])。

[圖 5] 使用失敗要求的追蹤進行疑難排解

[圖 5]** 使用失敗要求的追蹤進行疑難排解 **(按影像可放大)

失敗要求的追蹤和傳統記錄功能之間的差別在於,前者只會在偵測到特定的失敗要求條件時才會進行記錄。記錄檔本身是 XML,外加一個 XML 樣式表,使它既簡潔又方便閱讀。就跟 IIS 7.0 的其他多數功能一樣,這項功能預設並不會安裝,您可以在安裝程序的健康情況和診斷區段中找到此功能。您還必須在 IIS 管理員中啟用它才行。

IIS 7.0 對所有系統管理員來說,是向前邁進了一大步。它全新的架構和功能提供了順應您多變環境所需的靈活度和彈性。它的管理功能、回溯相容性工具和疑難排解功能正等著您部署,並運用於您現有的環境。

Isaac Roybal 在 Microsoft 擔任 Windows Server 的產品經理。他負責所有與 Windows Server 相關的網路事宜。Isaac 自 Windows NT 3.51 和 IIS 4.0 開始就投入 Windows Server。在這之前,他曾擔任 Office 網際網路平台和營運 (Office Internet Platform & Ops) 小組的營運專案經理 (Operations Program Manager) 一職。他擁有 Windows NT 4.0、Windows 2000 和 Windows Server 2003 的 MCSE 認證。

© 2008 Microsoft Corporation and CMP Media, LLC. 保留所有權利;未經允許,嚴禁部分或全部複製.