使用 IIS 7 的共享配置

介绍

互联网改变了公司处理日常业务的方式,以及他们在市场中竞争的方式。 随着新 Web 技术的出现以及通过 Web 访问资源的客户数量增加,迫切需要提高应用程序的可伸缩性、可用性、可靠性和可管理性。 应用程序应依赖于提供提供高运行时间、提高请求吞吐量、增加并发用户事务和更好的投资回报价值(例如比竞争系统更好的服务质量)的系统。

Web 场(服务器群集)已成为一种标准,有助于通过分发负载来提供高度可缩放、可用且可管理的应用程序。 更具体地说,这些应用程序属性是 Web 场和负载均衡背后的主要原因。 通过使用 Web 场,组织可以提供一种可缩放的方式来增加同时访问应用程序及其资源的用户组容量。

服务器群集通过让多台服务器分担负载来提高可用性。 群集还可以在任何给定时间点更好地扩展到增加的客户数量。 最后,群集通过轻松地处理 Web 场架构的配置和管理,提供改进的管理体验,而不会使运营资源紧张。

概述

本文重点介绍共享的集中式全局配置功能。 此功能有助于支持同质 Web 场,其中服务器跨服务器组共享同一配置。 通过使用 UNC 共享,对中央主配置文件所做的任何更改都会传播到不同的服务器,而无需额外的工具或编程支持。

本文的第一部分介绍如何使用 IIS 7 及更高版本的管理 UI 来启用和使用共享配置。 第二部分介绍如何从命令行启用和使用共享配置。

非目标:本文未涵盖的内容

多个方面都有助于成功的 Web 场环境,包括正确的可支持性、可管理性、可访问性、可伸缩性等。

共享配置仅侧重于 Web 场的配置管理方面,并处理跨服务器的配置。 有一些工具和其他功能可帮助管理多个服务器、复制内容、部署模块、同步应用程序二进制文件、设置第三方组件等。这些工具、功能和方面已脱离本文的范围。

本文仅详细介绍了如何跨服务器使用中央文件来维护配置。

因此,请注意,共享配置使服务器能够访问后端 UNC 共享中的配置文件,就好像它是其本地配置一样。 因此,使用前端 Web 服务器更新配置时,将对所有其他服务器进行更新。

请务必考虑其他情况,例如安装第三方模块或添加配置设置,并包含只有一个服务器能够理解的属性,并且具有可用于正常运行的二进制文件和架构。 否则,这种类型的使用可能会中断其他服务器。

为了避免同质场中出现此问题,应在群集上禁用共享配置,更新本地 applicationHost 文件,使其镜像远程文件,在单个服务器上部署和更新模块和配置,然后在该服务器上重新启用共享配置。 然后,可以在服务器其余部分部署和更新二进制文件和模块,然后再次启用共享配置。

域和非域环境

某些管理员在域环境中部署 Web 服务器群集,而另一些管理员则部署在工作组(非域)中。 本文讨论了这两种方案,并指出了区别和注意事项。 建议在域中的群集中设置 IIS,并借助 Active Directory 通过使用域控制器提供的帮助和安全性。

先决条件

必须按顺序完成以下步骤:

  1. 在服务器上安装 IIS,本文中将称为 Web 服务器。
  2. 确保访问第二台服务器,本文中将称为文件服务器。 文件服务器将存储用于配置和基本内容的共享文件夹,可以通过 UNC 访问。
  3. 本文的每个步骤都假定上一步已完成。 按顺序执行所有步骤。
  4. 对于某些步骤,可以使用 UI 完成等效的步骤。 除非另行指定,否则只执行一种类型的步骤。

集中配置

IIS 管理 UI 支持设置配置重定向并将配置文件以及必要的加密密钥导出到指定路径。

使用 UI 导出文件和设置配置重定向

  1. 打开 IIS 管理器。
  2. 在树视图中,选择要为其设置配置重定向的服务器连接。
  3. 双击“共享配置”。
    已选中“共享配置”图标的“I S 管理器”的屏幕截图。
  4. “作 ”窗格中,单击“ 导出配置...” ,将所需的配置文件从本地服务器导出到另一个位置(例如 UNC 共享)。
    “共享配置”中的“动作”窗格的屏幕截图,其中突出显示了“导出配置...”。
  5. 在“ 导出配置 ”对话框中,输入要导出文件的路径。 请输入密码以保护导出的加密密钥。 单击“ 确定 ”导出配置文件和受密码保护的加密密钥。
    “导出配置”对话框的屏幕截图,其中显示了“配置位置和加密密钥密码”字段。
  6. 选中“ 启用共享配置 ”复选框以启用配置重定向。
    “共享配置”对话框的屏幕截图,其中突出显示了“启用共享配置”。
  7. 指定配置和加密密钥所在的路径,并指定用于访问该路径的凭据。 单击“ 连接方式...” 并输入凭据。
    “共享配置”对话框的屏幕截图,其中输入了用户名和密码的凭据。
  8. 单击“应用”保存设置。 在 “共享配置 ”对话框中,输入为保护加密密钥而指定的密码。
    “共享配置”对话框的屏幕截图,其中显示了用于输入加密密钥密码的字段。
  9. 单击“ 确定 ”完成配置重定向设置。

上述步骤介绍如何导出配置并启用集中式配置。 但是,只需导出配置一次。 对将使用集中配置的每个后续服务器执行步骤 6 到 9。

有关使用 UI 的说明

设置配置重定向时,应使用 UI 导出导出的文件。 这是因为 UI 使用自己的自定义格式导出和导入受密码保护的加密密钥等项。

例如,如果手动将 administration.config 和 applicationHost.config 文件复制到共享,然后手动导出加密密钥,则无法使用 UI 设置配置重定向以指向这些文件。 这是因为导出的加密密钥不会采用 UI 所需的格式。

命令提示符

在本文的其余部分,必须使用命令提示符来运行某些命令。 建议使用具有提升的用户权限的命令提示符,因为如果运行正常的命令提示符,某些命令将不起作用。

使用提升的用户权限打开命令提示符

  1. 单击 “开始”
  2. 单击 “所有程序”。
  3. 单击 “附件”。
  4. 右键单击“命令提示符”并选择“以管理员身份运行”。
  5. 按照出现的任何对话框中的提示进行作。

备份当前 applicationHost.config 文件

尝试新功能或更改多个配置设置时,最好备份当前 applicationHost.config 文件。

备份 applicationHost.config 文件

  1. 打开命令提示符。

  2. 导航到默认位于 %WINDIR%\System32\InetSrv 的 IIS 目录。 配置文件存储在 InetSrv\Config 目录中。 使用 AppCmd 工具通过运行以下命令创建备份对象并备份 applicationHost.config 文件:

    cd /d %windir%\system32\inetsrv
    appcmd add backup centralConfigBackup
    

    注释

    AppCmd 工具驻留在 InetSrv 目录中。 必须从此目录中访问该工具,除非工具的路径已添加到系统的环境变量中。

  3. 通过运行以下命令,确保备份对象包含 applicationHost.config 文件和 SMTP 和其他非 Web 服务器设置的旧元数据库文件:

    appcmd list backup
    

将当前配置文件替换为备份文件

  1. 打开命令提示符。

  2. 导航到默认情况下位于 InetSrv 目录中的 IIS 目录。 运行以下命令还原 AppCmd 备份文件对象:

    cd /d %windir%\system32\inetsrv\
    appcmd restore backup centralConfigBackup
    

创建用户以访问用于配置的 UNC 共享

在域环境中,管理员必须在域中提供或创建帐户才能用于 Active Directory。 必须使用正确的用户权限设置此帐户才能访问 UNC 共享。

在非域环境中,管理员必须在两个服务器上创建具有用户访问权限的本地用户才能访问内容。 用户名和密码必须跨服务器相同才能在此设置中工作。 以下步骤有助于创建用户以读取共享配置所在的共享。

创建可以读取共享配置所在共享路径的用户(非域)

  1. 打开命令提示符。

  2. 在 Web 服务器(安装了 IIS 的前端服务器上),运行以下命令,使用密码 ConfigPass1 创建名为 ConfigUser1 的用户:

    net user ConfigUser1 ConfigPass1 /add
    
  3. 在文件服务器(中央配置所在的后端服务器)上,运行以下命令,使用密码 ConfigPass1 创建名为 ConfigUser1 的用户:

net user ConfigUser1 ConfigPass1 /add

为中央配置和内容创建 UNC 共享

配置的 UNC 共享托管要从此集中位置获取配置数据的任何服务器 applicationHost.config 文件。

创建 UNC 共享

  1. 在文件服务器上,打开命令提示符。

  2. 导航到驱动器的根目录。 运行以下命令,为配置创建目录并共享此目录,确保向用户授予读取和写入目录的权限:

    md %SystemDrive%\centralconfig
    net share centralconfig$=%SystemDrive%\centralconfig /grant:Users,Change
    

    注释

    此命令会自动向用户组授予此共享的用户权限。 为非域方案创建的用户会自动被授予更改权限,如果需要,可以进一步限制这些权限。 对于域场景,用户必须显式设置用户权限以访问共享,或者被添加到系统中的用户组。

  3. 非域场景:若要提高共享的安全性,可以将 /grant 开关中的 Users,Change 部分替换为 ConfigUser1,Change 参数。 只有指定的用户才能访问共享。

  4. 域方案:若要提高共享的安全性,可以将 /grant 开关的“用户”部分替换为域\用户,更改参数。 只有指定的用户才能远程访问共享。

    注释

    共享上的用户权限是远程和本地文件系统用户权限之间的联合。 必须将相应的用户权限设置为域帐户的目录才能成功读取配置共享。

向用于托管中央配置和内容的 UNC 共享的帐户授予用户权限

必须确保用于访问配置的帐户具有适当的用户权限。 IIS 使用此帐户以与将虚拟目录映射到 UNC 共享时访问内容的方式相同来访问 UNC 共享。 只有在访问共享时,此帐户的读取权限才很有用。 之后,每当 IIS 读取配置文件时,它将还原回调用方具有的标识:API、正在使用的管理工具或此时登录的用户。

注释

ConfigUser1 帐户(或用于读取配置的等效域帐户)与用于写入配置的帐户不同。 这些帐户不需要具有对共享或配置文件的写入用户权限。

向 UNC 共享(域)的帐户授予用户权限

  1. 如果域帐户是本地用户组的一部分,并且用户在创建共享时被授予访问权限,则可以跳过域设置的后续步骤。 但是,如果用于访问本地文件共享的域帐户不属于任何本地用户组,则必须执行该命令来授予用户权限。
  2. 在文件服务器上,打开命令提示符。
  3. 通过运行以下命令,向域帐户提供用户权限,以读取在其中存储配置的目录:
icacls %SystemDrive%\centralconfig\ /grant ___domain\user:R

添加 UNC 用户(包括非域用户和域用户)

在域和非域情况下,用户名必须包括登录批处理任务配置。 这不是 Windows Server® 2008 中的默认设置;必须手动将其添加到 Web 服务器。

  1. 单击 “开始”。 单击 “管理工具 ”并选择“ 本地安全策略”。
  2. “本地策略”下,选择“ 用户权限分配”。
  3. 双击 “以批处理作业身份登录 ”,并添加创建的 UNC 用户。

重定向配置

介绍

完成上述步骤后,Web 服务器正常运行,前端 Web 服务器应使用 localhost 环回地址为默认网站提供服务。

现在可以将配置移动到中心位置。 这样,你可以将文件声明为主文件,并将其保存在 UNC 共享中,以便配置多个服务器。 更改此文件一次将同时预配和更新所有服务器配置。

将配置存储在 UNC 共享中

  1. 从前端 Web 服务器上的目录复制 applicationHost.configadministration.config 文件 %windir%\system32\inetsrv\config ,以在后端文件服务器上共享。 如果当前登录的用户帐户具有后端共享的写入访问权限,则可以在目录中删除该文件。 如果没有,则必须在后端对用户帐户进行身份验证才能完成此步骤。

  2. 访问前端服务器配置目录中的现有 redirection.config XML 文件:

    • 使用 Windows 资源管理器导航到 %windir%\system32\inetsrv\config
    • 打开 redirection.config 文件。 设置 Web 服务器时,将创建此文件及其内容。 工具和 API 可以访问此文件,以确定是否启用了此功能。
  3. 打开 redirection.config 文件。 使用以下配置为环境设置正确的服务器名称、用户名和密码。

    <configuration> 
        <configSections> 
            <section name="configurationRedirection" /> 
        </configSections> 
        <!--password is ConfigPass1 or domainPassword-->
        <configurationRedirection enabled="true" path="\\machinename\centralconfig$\" userName="ConfigUser1 or ___domain\user" password="" /> 
    </configuration>
    
  4. 保存 redirection.config 文件。 可以再次访问站点,但配置现在存储在 UNC 共享中。

测试配置

该功能是为两个关键场景设计的,并且是在从后端引用配置时实现的。 可以通过两种方式更新前端 Web 服务器中的配置:

  1. 可以直接在文件共享中编辑 applicationHost.config 文件。 完成此作后,更改通知会触发,Web 服务器会检测到文件中的更改。
  2. 可以在后端文件共享中添加第二个 applicationHost.config 文件,并将 Web 服务器的 redirection.config 文件更改为指向该文件的新版本。 这对于回滚或分阶段部署非常有用。

概要

本文介绍了新的集中式配置功能。 此功能使得在 Web 场环境中具有同质群集的管理员能够将配置无缝地设置并部署到所有服务器。

设置该功能后,无论是在 UNC 共享的文件中进行更改,还是将服务器重定向到另一个位置,更改都会立即由 Web 服务器选取。 只有影响多个站点和应用程序的全局更改会导致它们回收,但如果在本地化范围内进行了更改,则不会重启其余站点和应用程序。

附录 1:以编程方式访问 Redirection.config 文件以读取值

此步骤提供了一个示例,演示如何利用新的 COM AHADMIN API 以编程方式访问 redirection.config 文件。 使用 AHADMIN COM API,从本机代码或从脚本和托管代码中实现此 API。

以编程方式读取值

  1. 创建文本文件,并使用 .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);
    }
    
  2. 保存 redirection.js 文件。 现在,由于 Windows 脚本主机(WSH),可以从命令提示符运行此文件。

附录 2:以编程方式访问 redirection.config 文件以写入值

此步骤提供了一个示例,演示如何利用新的 COM AHADMIN API 以编程方式访问 redirection.config 文件。 从本机代码或脚本使用此 API,并从其 COM 对象使用托管代码。

以编程方式写入值

  1. 创建文本文件,并使用 .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);
    }
    
  2. 保存 redirection.js 文件。

  3. 现在,由于 Windows 脚本主机(WSH),可以从命令提示符运行此文件。

附录 3:处理计算机特定的加密属性

默认情况下,IIS 包括用于保护属性的两个主要提供程序。 这些提供程序位于 applicationHost.config 文件的 <configProtectedData> 配置部分,并在 <providers> 元素中定义。

AesProvider 特定于处理 system.webServer 节中属性的加密和解密。

IISWASOnlyRsaProvider 专门用于处理 system.applicationHost 部分中的属性的加密和解密。

这些密钥位于 iisConfigurationKey 和 iisWasKey 密钥容器中,并且特定于计算机。 在 Web 场方案中,如果需要加密,则从一台计算机(通常是创建 applicationHost.config 文件的密钥)导出并引入其他计算机,以便 Web 服务器可以解密和使用安全属性。

步骤

  1. 打开命令提示符。 导航到默认情况下位于的 %windir%\Microsoft.NET\Framework\v2.0.50727\ Framework 目录。

    注释

    有关参考,系统的计算机密钥位于 %ALLUSERSPROFILE%\Microsoft\Crypto\RSA\MachineKeys\

  2. 使用aspnet_regiis工具导出密钥。 用于传输配置密钥的命令如下所述。 px 选项标识您要导出 RSA 密钥对。 "pri 选项标识您希望同时包含私钥和公钥。"

    此开关标识是加密和解密所必需的;否则,只能使用导出的密钥加密数据。 -px 后面的参数是要导出的密钥容器的名称。 在本例中,它是“iisConfigurationKey”密钥容器。 IIS 使用的另一个密钥容器是“iisWasKey”密钥容器。

    aspnet_regiis -px "iisConfigurationKey" "D:\iisConfigurationKey.xml" -pri
    
  3. 导出成功完成后,将 XML 文件复制到群集中的其他计算机,以准备将其导入其中。

  4. 导航到框架目录,并使用aspnet_regiis工具从 XML 文件导入密钥。 用于完成密钥传输的命令如下所述。

    -pi 后面的参数是要导入的密钥容器的名称。 在本例中,它是“iisConfigurationKey”密钥容器。 IIS 使用的另一个密钥容器是“iisWasKey”密钥容器。

    aspnet_regiis -pi "iisConfigurationKey" "D:\iisConfigurationKey.xml"