使用 IIS 7 的共享組態
簡介
互聯網改變了公司處理日常業務的方式,以及他們在市集中競爭的方式。 隨著新的 Web 技術出現,以及透過 Web 存取資源的客戶數量增加,迫切需要改善應用程式的延展性、可用性、可靠性和管理性。 應用程式應該依賴提供提供高運行時間、改善要求輸送量、增加並行使用者交易,以及比競爭系統更好的服務品質等更好的投資報酬率的系統。
Web 伺服器陣列 - 伺服器叢集 - 已成為一個標準,可藉由散發負載來提供可高度擴充、可用且可管理的應用程式。 更具體來說,這些應用程式屬性是 Web 伺服器陣列和負載平衡背後的主要原因。 藉由使用 Web 伺服器陣列,組織可以提供可調整的方式,以增加可同時存取應用程式及其資源的使用者基底容量。
伺服器叢集藉由讓多部伺服器分散負載來提供改善的可用性。 叢集也會更妥善地調整為在任何指定時間點增加的客戶數目。 最後,叢集藉由輕鬆處理 Web 伺服器陣列架構的佈建和管理,讓作業資源變得緊張,以提供改良的管理體驗。
概觀
本文著重於共用的集中式全域設定功能。 此功能可協助支援跨伺服器群組共用相同設定的同質 Web 伺服器陣列。 藉由使用 UNC 共用,對中央主要組態檔所做的任何變更都會傳播到不同的伺服器,而不需要額外的工具或程式設計支援。
本文的第一個部分說明如何使用 IIS 7 和更新版本的系統管理 UI 來啟用和使用共用組態。 第二個部分說明如何從命令行啟用和使用共用組態。
非目標:本文未涵蓋的內容
多個層面都有助於成功的 Web 伺服器數位環境,包括正確的可支援性、管理性、輔助功能、延展性等。
共用組態僅著重於 Web 伺服器陣列的組態管理層面,並處理跨伺服器的設定。 有工具和其他功能可協助管理多部伺服器、複製內容、部署模組、同步處理應用程式二進位檔、設定第三方元件等。這些工具、功能和層面已超過本文的範圍。
本文只會詳細說明如何在伺服器之間使用中央檔案來維護設定。
因此,請注意,共用設定可讓伺服器存取後端 UNC 共用中的組態檔,就如同其本機設定一樣。 因此,當您使用前端 Web 伺服器更新設定時,會對所有其他伺服器進行更新。
請務必考慮其他情況,例如安裝第三方模組或新增組態設定,並包含只有一部伺服器可瞭解並讓二進位檔和架構正常運作的屬性。 否則,這種類型的使用方式可能會中斷其他伺服器。
若要避免同質伺服器陣列發生此問題,您應該停用叢集上的共用設定、更新本機 applicationHost 檔案,使其鏡像遠端檔案、部署和更新單一伺服器上的模組和組態,然後在該伺服器上重新啟用共用組態。 然後,您可以部署和更新其餘伺服器上的二進位檔和模組,然後再啟用共用設定。
網域和非網域環境
有些系統管理員會在網域環境中部署 Web 伺服器叢集,而另一些則部署在工作組 (非網域) 中。 本文討論這兩個案例,並指出差異和警告。 建議您在網域的叢集中設定 IIS,以及 Active Directory 使用域控制器所提供的說明和安全性。
必要條件
您必須依序完成下列步驟:
- 在您的伺服器上安裝 IIS,本文將稱為網頁伺服器。
- 請確定存取第二部伺服器,本文將稱為文件伺服器。 檔案伺服器會儲存組態和基本內容的共用,您可以使用 UNC 來存取。
- 本文的每個步驟都假設上一個步驟已完成。 依序執行所有步驟。
- 對於某些步驟,有一個對等的步驟可以使用UI來完成。 除非另有指定,否則只執行一種類型的步驟。
集中式設定
IIS 系統管理 UI 支援設定組態重新導向,以及將組態檔和必要的加密金鑰導出至指定的路徑。
使用UI匯出檔案並設定組態重新導向
- 開啟 [IIS 管理員]。
- 在樹檢視中,選取您要設定組態重新導向的伺服器連線。
- 按兩下 [ 共用組態]。
- 在 [ 動作] 窗格中,按兩下 [匯出組態... ],將必要的組態檔從本地伺服器匯出到另一個位置(例如 UNC 共用)。
- 在 [ 匯出組態 ] 對話框中,輸入您要匯出檔案的路徑。 輸入密碼來保護也導出的加密金鑰。 按兩下 [ 確定 ] 匯出組態檔和受密碼保護的加密金鑰。
- 選取 [ 啟用共享設定 ] 複選框,以啟用組態重新導向。
- 指定組態和加密金鑰所在的路徑,並指定要用來存取該路徑的認證。 按兩下 [連線 As...],然後輸入認證。
- 按兩下 [ 套用 ] 以儲存設定。 在 [ 共享組態 ] 對話框中,輸入您指定來保護加密金鑰的密碼。
- 按兩下 [ 確定 ] 完成設定重新導向。
上述步驟說明如何匯出組態並開啟集中式設定。 不過,您只需要匯出組態一次。 在每個將使用集中式設定的後續伺服器上執行步驟 6 到 9。
關於使用UI的注意事項
設定組態重新導向時,導出的檔案應該已使用UI匯出。 這是因為 UI 會使用自己的自訂格式匯出和匯入專案,例如受密碼保護的加密密鑰。
例如,如果您手動將 administration.config 和 applicationHost.config 檔案複製到共用,然後手動匯出加密密鑰,您將無法使用 UI 來設定組態重新導向以指向這些檔案。 這是因為匯出的加密金鑰不是 UI 所需的格式。
命令提示字元
在本文的其餘部分,您必須使用命令提示字元來執行特定命令。 建議您使用具有提升許可權的命令提示字元,因為如果您執行一般命令提示字元,某些命令將無法運作。
使用提高的用戶權力開啟命令提示字元
- 按一下 [開始] 。
- 按兩下 [所有程式]。
- 按兩下 [ 配件]。
- 用滑鼠右鍵按一下 [命令提示字元],然後選取 [以系統管理員身分執行]。
- 遵循任何出現的對話框中的提示。
備份目前的 applicationHost.config 檔案
嘗試新功能或變更多個組態設定時,最好備份目前的 applicationHost.config 檔案。
備份 applicationHost.config 檔案
開啟命令提示字元。
瀏覽至預設位於的
%WINDIR%\System32\InetSrv
IIS 目錄。 組態檔會儲存在 InetSrv\Config 目錄中。 執行下列命令,使用 AppCmd 工具來建立備份物件並備份 applicationHost.config 檔案:cd /d %windir%\system32\inetsrv appcmd add backup centralConfigBackup
注意
AppCmd 工具位於 InetSrv 目錄中。 除非工具的路徑已新增至系統的環境變數,否則您必須從這個目錄存取此工具。
執行下列命令,確定備份物件包含 applicationHost.config 檔案和 SMTP 和其他非 Web 伺服器設定的舊版中繼基底檔案:
appcmd list backup
將目前的組態檔取代為備份檔
開啟命令提示字元。
流覽至 IIS 目錄,預設位於 InetSrv 目錄中。 執行下列命令來還原 AppCmd 備份檔案物件:
cd /d %windir%\system32\inetsrv\ appcmd restore backup centralConfigBackup
建立使用者以存取用於設定的 UNC 共用
在網域環境中,系統管理員必須在網域中提供或建立帳戶,才能與 Active Directory 搭配使用。 您必須使用正確的使用者權力來設定此帳戶,才能存取 UNC 共用。
在非網域環境中,系統管理員必須在兩部伺服器上建立具有使用者存取內容的本機用戶權力。 使用者名稱和密碼必須跨伺服器相同,才能在此設定中運作。 下列步驟可協助建立使用者,以讀取共用組態所在的共用。
建立可讀取共享組態所在共享的使用者 (非網域)
開啟命令提示字元。
在 Web Server (安裝 IIS 的前端伺服器上),執行下列命令,以密碼 ConfigPass1 建立名為 ConfigUser1 的使用者:
net user ConfigUser1 ConfigPass1 /add
在檔案伺服器 (中央組態所在的後端伺服器上),執行下列命令,以密碼 ConfigUser1 建立名為 ConfigUser1 的使用者:
net user ConfigUser1 ConfigPass1 /add
建立中央設定和內容的 UNC 共用
組態的 UNC 共用會裝載 applicationHost.config 檔案,供任何想要從這個集中式位置挑選組態數據的伺服器使用。
若要建立 UNC 共用
在 [檔案伺服器] 上,開啟命令提示字元。
流覽至磁碟驅動器的根目錄。 執行下列命令來建立組態和共用此目錄的目錄,請務必授與使用者讀取和寫入目錄的用戶許可權:
md %SystemDrive%\centralconfig net share centralconfig$=%SystemDrive%\centralconfig /grant:Users,Change
注意
此命令會自動將用戶權力授與使用者群組給此共用。 為非網域案例建立的用戶會自動獲得變更許可權,視需要進一步限制。 針對網域案例,用戶必須明確設定用戶權力,才能存取共用,或新增至系統中的使用者群組。
非網域案例:若要增加共用的安全性,您可以使用 ConfigUser1、Change 參數來取代 /grant 參數的 Users,變更部分。 只有指定的使用者才能存取共用。
網域案例:若要增加共用的安全性,您可以將 /grant 參數的 [使用者]、[變更] 部分取代為 domain\user、Change 參數。 只有指定的使用者才能遠端訪問共用。
注意
共用上的用戶權力是遠端和本機檔系統用戶權力之間的聯集。 您必須將適當的用戶權力設定為目錄,網域帳戶才能成功讀取組態共用。
將用戶權力授與裝載中央設定和內容的 UNC 共用帳戶
您必須確定用來存取組態的帳戶具有適當的用戶權力。 IIS 會使用此帳戶,以與虛擬目錄對應至 UNC 共用時存取內容的相同方式來存取 UNC 共用。 僅存取共用時,此帳戶的讀取用戶權力很有用。 在那一點之後,每當 IIS 讀取組態檔時,它會還原回呼叫端擁有的身分識別:API、正在使用的管理工具,或當時登入的使用者。
注意
ConfigUser1 帳戶 - 或用來讀取組態的對等網域帳戶 - 與用來寫入設定的帳戶不同。 這些帳戶不需要擁有共用或組態檔的寫入用戶權力。
將使用者權力授與 UNC 共用的帳戶 (網域)
- 如果網域帳戶是本機使用者群組的一部分,且在建立共用時授與使用者存取權,您可以略過網域設定的後續步驟。 不過,如果存取本機檔案共用的網域帳戶不是任何本機使用者群組的一部分,您必須執行 命令來授與用戶權力。
- 在 [檔案伺服器] 上,開啟命令提示字元。
- 提供網域帳戶的使用者許可權,以執行下列命令來讀取儲存組態的目錄:
icacls %SystemDrive%\centralconfig\ /grant domain\user:R
新增 UNC 使用者 (非網域和網域)
針對網域和非網域案例,用戶名稱必須包含登入批次作業組態。 這不是 Windows Server® 2008 中的預設設定;您必須手動將它新增至 Web 伺服器。
- 按一下 [開始] 。 按兩下 [管理員 工具],然後選取 [本機安全策略]。
- 在 [本機原則] 底下,選取 [用戶權力指派]。
- 按兩下 [ 以批次作業 登入],然後新增您所建立的 UNC 使用者。
重新導向組態
簡介
既然您已完成上述步驟,Web 伺服器就正常運作,前端網頁伺服器應該使用 localhost 回送位址來提供其默認網站。
您現在可以將設定移至中央位置。 這可讓您將檔案宣告為主要檔案,並將它儲存在 UNC 共用中,以便設定多部伺服器。 一次變更此檔案將會一次布建及更新所有伺服器組態。
將設定儲存在 UNC 共用中
從 前端 Web 伺服器上的目錄複製 applicationHost.config 和 administration.config 檔案
%windir%\system32\inetsrv\config
,以在後端檔伺服器上共用。 如果目前登入的用戶帳戶具有後端共用的寫入許可權,您可以在目錄中卸載檔案。 如果沒有,您必須向後端驗證用戶帳戶,才能完成此步驟。存取前端伺服器組態目錄中現有的 redirection.config XML 檔案:
- 使用 Windows 檔案總管瀏覽至
%windir%\system32\inetsrv\config
。 - 開啟 redirection.config 檔案。 設定 Web 伺服器時,會建立此檔案及其內容。 工具和 API 可以存取此檔案,以判斷是否啟用此功能。
- 使用 Windows 檔案總管瀏覽至
開啟 redirection.config 檔案。 使用您環境的正確伺服器名稱、使用者名稱和密碼來設定下列組態。
<configuration> <configSections> <section name="configurationRedirection" /> </configSections> <configurationRedirection enabled="true" path="\\machinename\centralconfig$\" userName="ConfigUser1 or domain\user" password="ConfigPass1 or domainPassword" /> </configuration>
儲存您的 redirection.config 檔案。 您可以再次存取網站,但設定現在會儲存在 UNC 共用中。
測試組態
從後端參考組態時,有兩個主要案例是此功能所設計。 您可以透過兩種方式更新前端 Web 伺服器的組態:
- 您可以直接在檔案共享中編輯 applicationHost.config 檔案。 完成此動作之後,就會進行變更通知,而網頁伺服器會挑選檔案中的變更。
- 您可以在後端檔案共用中新增第二個 applicationHost.config 檔案,並將 Web 伺服器的重新導向.config 檔案變更為指向新版的檔案。 這適用於復原用途或分段部署。
摘要
本文介紹新的集中式設定功能。 這項功能可讓在 Web 伺服器數位環境中設定並部署組態給所有伺服器的系統管理員順暢地進行設定。
設定功能之後,無論是在 UNC 共用的檔案中進行變更,還是將伺服器重新導向至另一個位置,Web 伺服器會立即挑選變更。 只有影響多個網站和應用程式的全域變更會導致它們回收,但如果在當地語系化範圍中進行變更,則不會重新啟動其餘的網站和應用程式。
附錄 1:以程序設計方式存取 Redirection.config 檔案以讀取值
此步驟提供如何使用新的 COM AHADMIN API,以程式設計方式存取重新導向.config 檔案的範例。 使用 AHADMIN COM API,從機器碼或腳本和 Managed 程式代碼實作此 API。
以程式設計方式讀取值
建立文字檔,並使用.js擴展名加以儲存。 下列文稿提供如何為您的環境讀取已啟用屬性、伺服器名稱、使用者名稱和密碼的範例:
try { var config = WScript.CreateObject( "Microsoft.ApplicationHost.AdminManager" ); var section = config.GetAdminSection( "configurationRedirection", "MACHINE/REDIRECTION" ); WScript.Echo( "Current redirection:" ); WScript.Echo( "enabled = " + section.Properties.Item( "enabled" ).Value ); WScript.Echo( "path = " + section.Properties.Item( "path" ).Value ); WScript.Echo( "user = " + section.Properties.Item( "userName" ).Value ); WScript.Echo( "pass = " + section.Properties.Item( "password" ).Value ); } catch(e) { WScript.Echo(e.number); WScript.Echo(e.description); }
儲存您的redirection.js檔案。 您現在可以從命令提示字元執行此檔案,因為 Windows 腳本主機 (WSH)。
附錄 2:以程序設計方式存取重新導向.config 檔案以撰寫值
此步驟提供如何使用新的 COM AHADMIN API,以程式設計方式存取重新導向.config 檔案的範例。 從機器碼或腳本使用這個 API,以及來自其 COM 物件的 Managed 程式代碼。
以程式設計方式撰寫值
建立文字檔,並使用.js擴展名加以儲存。 下列文稿提供如何為您的環境撰寫已啟用屬性、伺服器名稱、使用者名稱和密碼的範例:
try { var config = WScript.CreateObject( "Microsoft.ApplicationHost.WritableAdminManager" ); config.CommitPath = "MACHINE/REDIRECTION"; var section = config.GetAdminSection( "configurationRedirection","MACHINE/REDIRECTION" ); section.Properties.Item( "enabled" ).Value = true; section.Properties.Item( "path" ).Value = "\\\\somemachine\\sharefile://folder/"; section.Properties.Item( "userName" ).Value = "testuser"; section.Properties.Item( "password" ).Value = "testuser"; config.CommitChanges(); } catch(e) { WScript.Echo(e.number); WScript.Echo(e.description); }
儲存您的redirection.js檔案。
您現在可以從命令提示字元執行此檔案,因為 Windows 腳本主機 (WSH)。
附錄 3:處理機器特定的加密屬性
根據預設,IIS 包含兩個主要提供者來保護屬性。 這些提供者位於 applicationHost.config 檔案的 <configProtectedData> 組態區段中,並定義於 providers> 元素中<。
AesProvider 是專門用來處理 system.webServer 區段中屬性的加密和解密。
IISWASOnlyRsaProvider 是處理 system.applicationHost 區段中屬性的加密和解密。
這些密鑰位於 iisConfigurationKey 和 iisWasKey 金鑰容器中,而且是電腦特定的。 在 Web 伺服器陣列案例中,如果需要加密,則來自一部機器的密鑰-通常是建立 applicationHost.config 檔案的密鑰會匯出並帶入其他電腦,以便 Web 伺服器解密和使用安全屬性。
步驟
開啟命令提示字元。 流覽至預設位於的
%windir%\Microsoft.NET\Framework\v2.0.50727\
Framework 目錄。注意
如需參考,系統的機器密鑰位於 %ALLUSERSPROFILE%\Microsoft\Crypto\RSA\MachineKeys\
使用aspnet_regiis工具來匯出金鑰。 要傳輸組態密鑰的命令如下所述。 px 參數會識別您想要匯出 RSA 金鑰組。 pri 參數會識別您也想要同時包含私鑰和公鑰。
此交換器識別必須同時進行加密和解密;否則,您只能使用導出的金鑰來加密數據。 -px 之後的參數是要導出的密鑰容器名稱。 在此情況下,它是 「iisConfigurationKey」 密鑰容器。 IIS 使用的另一個密鑰容器是 「iisWasKey」 金鑰容器。
aspnet_regiis -px "iisConfigurationKey" "D:\iisConfigurationKey.xml" -pri
匯出成功完成之後,請將 XML 檔案複製到叢集中的另一部計算機,以準備匯入該電腦。
流覽至 Framework 目錄,並使用 aspnet_regiis 工具從 XML 檔案匯入金鑰。 完成金鑰傳輸的命令如下所述。
-pi 之後的參數是要匯入的金鑰容器名稱。 在此情況下,它是 「iisConfigurationKey」 密鑰容器。 IIS 使用的另一個密鑰容器是 「iisWasKey」 金鑰容器。
aspnet_regiis -pi "iisConfigurationKey" "D:\iisConfigurationKey.xml"