IIS 7 中的配置系统

作者:Walter Oliver

概述

IIS 7 引入了一个新的配置系统,它是所有新的管理相关功能的核心。 该配置系统基于分布式的明文 XML 文件,这些文件保存整个 Web 服务器平台(包括 IIS、ASP.NET 和其他组件,例如 FTP 7.5)的配置设置,并且可以选择在内容目录中与 Web 内容一起进行设置(如果在相应等级已解锁)。 请注意,FTP 6.0 配置设置存储在 MetaBase 中。

计算机管理员可以将配置层次结构的不同级别委托给其他用户,例如站点管理员或应用程序开发人员。 只有计算机管理员才能访问安全默认设置和现成的锁定功能,但他们对配置设置只能进行写入访问(只有少量的网站专用设置例外,例如 DefaultDocument);但是,复杂且精细的锁定功能可以安全解锁并将特定配置设置的管理委托给更多用户,以适应其 Web 命名空间的范围。 系统在 API 级别与早期版本的 IIS(在安装 MetaBase 兼容层后)向后兼容。

在根(或全局)级别,有两个单独的文件:

  • system32\inetsrv\config\applicationHost.config:保存 Web 服务器 (IIS) 设置的全局默认值。
  • \Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config:保存 .NET Framework 设置的全局默认值,包括一些 ASP.NET 设置(其余部分位于同一文件夹中的 web.config(有时称为根 web.config)中)。

仍然存在两个单独文件的原因是这两个技术版本不同(计划方面和产品方面)。 IIS 是 Windows 的一部分,.NET Framework 可以是独立版本。

在 Web 内容目录中,可能包含可选的 web.config 文件,用于控制其层次结构级别及更低级别的行为。 它们可以位于本地或远程位置(例如,如果内容目录位于 UNC 共享上)。 它们可以包含 IIS、ASP.NET 或可以在其级别指定的任何其他 .NET Framework 配置设置。 默认情况下没有 web.config 文件。

层次结构

就继承层次结构而言,根文件是 machine.config,然后是同一目录中的 web.config(称为根 web.config),然后是 applicationHost.config,最后是命名空间中的可选 web.config 文件(如下图所示)。 Diagram showing the relationship between the files contained in the I I S 7 and Config Files namespaces.

部分

在配置文件中,根据名为“section”的单元,以结构化方式组织设置。 配置部分是一组逻辑相关的设置,可以整体部署或整体从系统注销,并且通常由一个服务器模块使用。

换句话说,在工作进程中运行的几乎每个运行时模块都有相应的配置部分。 配置节也是扩展性的单元:将新设置添加到配置架构是通过扩展现有节或向其添加一个或多个节来完成的。

这些节进一步分组到逻辑相关的集合中,称为“节组”。 节组不是部署单元、注册或其他任何实质性操作(例如锁定、加密)。 它们中没有设置。 其用途是进一步构建设置的组织,并避免配置节的长列表。 它们用于生成设置的层次结构,因此它们之间确实有关系(父/子级)。

换句话说,可以嵌套节组。 给定节始终属于一个节组,不能包含其他节(或节组)。 给定节组可能属于父节组,并且可能包含零个或多个子节组。 它通常包含多个部分,否则它就没有存在的必要(但是,客户无论出于何种原因,都可以通过创建只有一个节的自己的节组来扩展架构)。

下面是演示节和节组的示例:

<!-- section group for web server configuration -->
<system.webServer>
  <!-- section group for web server security configuration -->
  <security>
    <!-- section group for web server authentication configuration -->
    <authentication>
      <!-- three sections for authentication -->
      <basicAuthentication ... />
      <windowsAutnentication ... />
      <anonymousAuthentication ... />
    </authentication>
  </security>
</system.webServer>

每个节都有一个名称。 短名称是节本身的名称,长名称是全名,包括包含的所有节组。 例如,“windowsAuthentication”的全名是“system.webServer/security/authentication/windowsAuthentication”。 此分层组织允许将来创建具有相同名称的节(和节组),但在不同的节组下。

URL 命名空间的每个级别都有关联的配置。 给定级别的配置将继承到子级别,除非被子级专门替换。 实现按 URL 配置的一种简单方法是在映射到虚拟路径的物理文件系统文件夹中使用 web.config 文件。 在根级别(计算机级别),应使用单独的文件,具体取决于配置节组(稍后将在文档中定义;出于当前目的,请考虑将其视为包含配置的 XML 元素的名称):

节组 说明 根文件
system.applicationHost Windows 激活系统:进程模型 System32\inetsrv\config\applicationHost.config
system.webServer IIS:Web 服务器 System32\inetsrv\config\applicationHost.config
system.web ASP.NET Windows\microsoft.net\framework\v2.0.50727\config\web.config
系统。* 其他 .NET 架构 Windows\microsoft.net\framework\v2.0.50727\config\machine.config
[Microsoft 其他] Microsoft 其他 Windows\microsoft.net\framework\v2.0.50727\config\machine.config
[自定义] 第三方 machine.config 或 root web.config 或 applicationHost.config,最多为第三方/客户

配置的持久性格式为 XML;因此,描述配置组织单位与 XML 术语之间的映射非常有用。 节组和节是 XML 元素。 在一个节中,这些设置被组织为与 XML 术语密切相关的较小单元:

配置单位 XML 术语 说明
配置元素 XML 元素 包含其他子单元;没有值。
配置集合 XML 元素 元素的专用案例:包含一组 add/remove/clear 格式的元素。
配置属性 XML 属性 仅包含一个值;不包含子单元。

配置系统的核心是一个声明性架构。 配置架构跨越多个文件,这些文件都位于以下已知位置:system32\inetsrv\config\schema。 默认情况下,只有计算机管理员有权访问此文件夹。 客户或第三方可以通过将其复制到该目录中来为其自定义节添加架构文件。 在调用方进行配置的过程中,配置系统会在启动时自动选取它们。 如果配置系统已在运行,则不会选取对架构文件或新文件的更改。

请勿编辑安装到此目录中的 IIS 或其他架构文件,因为错误可能会导致架构损坏,以及服务器无法启动。

注意

没有用于获取和设置架构文件的高级程序设计界面,无需传统文件访问 API 和 XML 分析/编辑。 在对架构文件夹进行任何更改之前,始终建议备份敏感状态(如架构文件夹)。

三个文件构成了 Web 服务器平台的统一架构:

  • IIS_schema.xml:涵盖 Windows 激活系统和 IIS Web 服务器设置和节组。
  • ASPNET_schema.xml:涵盖节组中的 ASP.NET 设置。
  • FX_schema.xml:涵盖各种节组中的其他 .NET Framework 设置。

如果安装了 IIS 7 FTP 功能,则还会发现FTP_schema.xml。