概览:
- IIS 7.0 体系结构变化
- 管理 IIS 7.0
- 向后兼容
- IIS 7.0 故障排除
每个 IT 商店均不同,它们具有其自身独特的一组需求和目标,特别是在网站或服务托管方面。Web 服务器可能需要各种修补或更改以满足组织的需求,但伴随而来的挑战是要将此方案
复制到多台服务器上,同时对所有服务器进行有效的管理。IIS 7.0 中一些最大的变化旨在帮助 IT 商店在构建 Web 服务器或 Web 场时应对这些挑战。
看过 IIS 7.0 中所有强大功能的列表后,我迫切地想与您一同分享这些功能的详细信息。当我意识到不可能在此介绍所有这些信息后,我决定重点介绍 IIS 7.0 一些最重要的功能和最大的变化。如果希望了解更多信息,请访问 IIS 社区网站 IIS.net。
新体系结构
IIS 7.0 中的核心变化与体系结构、请求处理、PHP 应用程序框架支持和配置存储相关。在 IIS 6.0 中,功能基本上是要么全有要么全无的概念。您必须安装所有功能,并且只能使用 ISAPI 来自定义 IIS。
IIS 构建在这样一个假定基础之上:Web 管理员希望从最基本的一组功能开始,然后分层添加所在环境中需要的其他功能。只有您才最了解自己所在的环境,因此 IIS 7.0 为您提供了构建块,以创建您自己的自定义 Web 服务器。这样做可以降低您的管理开销,因为它减少了服务器的攻击面,而且无需更新未使用的组件。这种新方法的核心是 IIS 7.0 的模块化体系结构。
IIS 7.0 采用的新设计使您能够选择将要安装到服务器上的功能,也称为模块。这些模块直接插入到集成请求管道中。这种新的模块化设计具有许多优势,包括减少攻击面和 Web 服务器的占用量。
IIS 目前包含 40 个默认模块(例如,基本模块、匿名模块),而且 Windows® 身份验证现在已成为能够独立添加到请求管道中的单独模块。为简化分类,所有模块分成了八个子类别(请参阅图 1)。
图 1 IIS 7.0 模块分为八个功能区域 (单击该图像获得较大视图)
这意味着您现在可以构建与您的环境完全相符的自定义 Web 服务器。但是,如果 40 个默认模块无法提供您需要的功能,比如某些种类的自定义身份验证或内容修饰符,应该怎么办呢?没关系。您可以通过本机或托管代码编写满足需要的模块,并将其插入到管道中。这也使 Microsoft 能够独立编写和发布新模块,因此您不必等待下一个服务包或主要产品发布。IIS 7.0 还赋予您使用自定义模块覆盖 40 个默认模块中任意模块的能力。有关如何构建您自己的模块的详细信息,请访问 IIS.net。
集成请求管道
将集成请求管道想象成一组基本的线性步骤,每次提供页面时都必须出现这些步骤(如图 2 所示)。通常,必须进行某种身份验证,然后才能授权检索内容、确定和执行该内容所需的处理程序、执行任何必要的日志记录、最后发送响应。集成请求管道使 IIS 7.0 可以灵活地同时运行不同的应用程序框架。例如,您可以在 PHP 内容之上运行窗体身份验证以及自定义的日志记录模块,所有这些均在同一个管道内实现。
图 2 IIS 7.0 集成管道和模块 (单击该图像获得较大视图)
服务器上的每个网站都有集成请求管道,并且可通过两种模式(集成模式和经典模式)之一运行。默认的集成模式允许将特定功能项插入到管道中,使您可以精细地控制请求过程。出于兼容性考虑,经典模式通过将 ISAPI 模块插入管道来重现 IIS 6.0/ISAPI 功能。在将应用程序迁移到 IIS 7.0 时,此模式非常有用。
默认安装
现在,让我们来讨论设置您的新模块化 Web 服务器。如果查看 IIS 7.0 的默认安装,您会注意到它仅包含 10 个模块(如果包含 Windows Process Activation Service)。安装 Web 服务器角色时,IIS 7.0 安装提供 IIS 的基本功能,特别是只有那些提供类似纯 HTML 或经典 ASP 之类静态内容所需的模块。之后在服务器上安装哪些模块完全由您决定。以下是默认安装中所包含的功能:
- 常用 HTTP 功能,包括静态内容、默认文档、目录浏览和 HTTP 错误
- 运行状况和诊断功能,例如 HTTP 日志记录和请求监视器
- 安全功能,例如请求过滤
- 性能功能,例如静态内容压缩
- 管理工具,包括 IIS 管理控制台
- Windows Process Activation Service
如您所见,这只是最基本的服务器,不包括 ASP.NET 或其他 IIS 7.0 新功能,例如诊断和故障排除功能。在服务器上启动其他功能—例如提供类似 ASP.NET 和 FastCGI (PHP) 之类动态内容的功能—非常简单。从 Windows Server® 2008 服务器管理器内的 Web 服务器角色的“添加角色服务”中,选择一组要安装的模块。
新的配置存储
IIS 7.0 中使您的生活变得更加轻松的另一项主要变化是新的配置存储。元数据库现在是为向后兼容而提供的可选安装组件,它已经由 XML 配置系统取代。我知道您会说“但元数据库本来就是 XML 啊!”是的,确实如此。但它过于繁琐,而且不易于阅读(至少不易于人类阅读)。它已由更为灵活的 XML 系统所取代。与 ASP.NET 类似,IIS 7.0 使用 .config 文件—清晰、简单、便携且易读的 .config 文件。
转移到此格式意味着配置系统现在独立于计算机,不再像元数据库那样依赖于单个计算机。因此,您现在可以轻松地将配置系统移动到其他服务器上,只需简单地使用拖放或 xcopy 即可。
此新配置系统还利用 IIS 7.0 中称为“共享配置”的新功能解决了 Web 场的难题。由于此新配置系统便于携带,因此您可在场内的所有节点中共享一个主 .config 文件。“共享配置”允许您从已知工作情况良好的预生产服务器上导出配置,然后在生产或“实时”环境中共享该配置。
导出 .config 文件时,必须提供加密密钥密码。这样做是为了保护 .config 文件,防止恶意 Web 服务器在非经授权的情况下尝试模仿您服务器的 .config。
启用“共享配置”非常简单。在 IIS 管理器的服务器节点中,选择位于任务窗格“管理”部分下的“共享配置”。只需选中“启用共享配置”,提供要共享(通常是 UNC 共享)的配置的物理路径,然后输入访问该物理路径所需的凭据并单击“应用”即可。找到 .config 文件时,将提示您输入加密密码。完成该过程后,重新启动 IIS 管理器以便其拾取新的 .config。
新配置系统的结构与过去所使用的结构不同,让我们先了解一下基础知识。如图 3所示,IIS 7.0 的配置分为两个类别:服务器范围设置和站点特定的设置。所有服务器范围设置均存储在 applicationhost.config 内,它位于 %systemroot%\windows\system32\inetsrv\config 中。其中包括所有已安装的模块、服务器上的站点等。站点特定的设置存储在单独的 web.config 文件中。
图 3 服务器范围设置使用一个 .config 文件,而此服务器上的每个网站都使用各自独立的配置文件 (单击该图像获得较大视图)
如果您曾经使用过 ASP.NET,则可能熟悉 web.config 文件。IIS 7.0 使用 web.config 文件来存储特定于各个网站的设置,例如站点的默认文档和应用程序设置,以及 ASP.NET 设置。这意味着您需要为服务器上的每个站点提供一个 web.config 文件。
站点的 web.config 文件位于该站点的物理路径中,例如 %systemroot%\inetpub\wwwroot。此设计同样具有前面所述的便携优势,但它在站点级别使用。例如,您可以在测试服务器上简单地部署一个站点,然后通过拖放或 xcopy 将站点的 web.config 和应用程序文件移到生产服务器上。
无论何时导入或共享 .config 文件,均需注意特定于计算机的信息,如 IP 地址和驱动器盘符。IIS 7.0 通过支持 OS 环境变量(如 %systemroot%)解决了该潜在问题。此外,确保安装在测试和生产服务器上的模块组相同。这将有助于避免不可预料的应用程序错误。如果 web.config 引用了尚未安装的模块,或者默认模块与自定义模块冲突,也会发生错误。
管理您的 Web 服务器
现在,您已部署好了功能强大、自定义、灵活且便携的新 Web 服务器。如何对其进行管理呢?管理是规划和构建 IIS 7.0 的重要部分,有多种方法可以处理管理工作。
共有以下三种类别,管理首选项通常归入到至少一种类别中:在 UI 中使用鼠标管理、在命令提示符处输入命令,以及编写脚本以尽可能地实现自动化。让我们首先介绍 UI。
在 IIS 6.0 中,UI Microsoft® 管理控制台 (MMC) 管理单元有两种熟悉的基本视图:树视图和选项卡视图。要详细查看某项设置,需右键单击并选择“属性”,然后您将看到一组选项卡(未涉及单选按钮和复选框)。
令人高兴的是,在 IIS 7.0 中,UI 已彻底改观。此称为“IIS 管理器”的新 UI 旨在启用面向任务的方法,如图 4 所示。此外,还为下级客户端(如 Windows XP 和 Windows Server 2003)提供“远程管理器”,该管理器可从 IIS.net/downloads 下载。
图 4 IIS 7.0 中的新 UI (单击该图像获得较大视图)
新用户界面由左侧的“连接”窗格、右侧的“操作”窗格,以及中间的任务窗格或工作区组成。左侧的连接管理器树与 IIS 6.0 树视图类似,其中包含许多父节点和子节点。树视图的新功能是可以创建新连接、保存当前连接或删除现有连接。任务窗格是 UI 的最大改进,它提供了两种工作视图。功能视图从原来的“选项卡”视图中提取所有可配置的 IIS 属性,并将它们按照管理区域(例如 IIS、管理和安全)分组。
ASP.NET 属性也已集成到 IIS 管理器中,从而无需再使用额外的 MMC 管理单元。每个可配置属性都具有它自己的图标,因此便于查找。同时,因为 IIS 管理器是作为 Windows Forms 应用程序而构建的,所以您可以轻松地为所编写的任何自定义模块或功能添加插件图标。
任务窗格的第二种视图是内容视图,其与 IIS 6.0 非常相似,在此类视图中,您可以看到站点内容目录中的内容并可根据此内容执行操作。为该视图提供的新功能是选择特定内容(例如特定网页),然后切换到功能视图以调用选定内容上的某些设置,该功能为您提供了直至页面级的精细控制。
其他管理方式
对于那些喜欢使用命令行的人而言,利用称为 APPCMD.exe 的功能强大的新工具,既能够执行类似停止站点或备份当前 .config 文件之类的简单任务,也能够执行类似搜索配置架构之类的复杂任务。其语法十分简单:
APPCMD (command) (object-type) <identifier> </parameter1:value1 ...>.
要列出可用于 APPCMD 的所有对象,请键入:
或者,如果您希望查看特定对象类型的可用命令,请输入:
对于所有编码员而言,IIS 7.0 中已增加了称为 Microsoft.Web.Administration 的托管代码 API,以及一个新的 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 中直接构建远程管理功能(通过不受防火墙影响的 HTTPS 工作)来对此进行补救。
IIS 7.0 中的远程管理可以在多个方面简化工作。首先,您可以获得与本地登录相同的 UI 体验。其次,由于使用 HTTPS 协议进行通信,因此无需在防火墙上开放端口。最后,您现在可以在单个 UI 中管理多台服务器,而不必同时打开多个远程桌面或远程网站窗口。
IIS 7.0 中的实际远程管理服务在本质上是一个小型 Web 应用程序,它作为单独的服务、在名为 NT Service\WMSVC 的 Windows NT® 本地服务账户下运行。此设计使得即使在 IIS 服务器自身无响应的情况下仍可维持远程管理功能。
与 IIS 7.0 中的大多数功能类似,出于安全性考虑,远程管理并不是默认安装的。要安装远程管理功能,请将 Web 服务器角色的角色服务添加到 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 管理器视图中。此类功能委派可以让您提供对其他内容的严格受控访问,而无需提供对 Web 服务器的管理控制。
IIS 7.0 的发展
设计 IIS 7.0 时,设计团队希望通过允许使用管理工具中的某些现有投资和 IIS 6.0 的脚本来确保迁移到 IIS 7.0 的过程尽可能地平稳。他们为 IIS 7.0 的向后兼容性付出了许多努力,从而使其能够继续运行 IIS 6.0 所使用的脚本。您可在安装中的 IIS 6.0 管理兼容性节点下安装一整套工具—范围从 IIS 6.0 元数据库兼容性到实际的 IIS 6.0 管理控制台。
IIS 6.0 元数据库兼容性基础结构使用称为 ADOMapper 的组件。它允许您根据新配置系统运行 IIS 6.0 管理基础对象 (ABO) 和 ADSI(Active Directory 服务接口)元数据库脚本,但仅限于使用 IIS 6.0 中提供的功能。因此,它不能读写新的 IIS 7.0 属性、访问新的运行时数据,或者读写 ASP.NET 属性或 web.config 文件。
故障排除和诊断
故障排除和诊断一直是最耗时的工作。深入分析日志并尝试重现大型 Web 场,甚至单个服务器中的问题都是非常棘手的工作。IIS 7.0 中包含一个称为“失败请求跟踪”的工具,可帮助您从枯燥而费时的工作中解脱出来。它在许多情况下非常有用,包括请求挂起或程序出错,以及调查身份验证和授权问题。
“失败请求跟踪”使用跟踪规则作为条件来搜索错误。可以创建跟踪规则,以通过指定希望跟踪的内容类型(例如,服务器上的所有内容、仅 ASP.NET 内容或诸如 PHP 等自定义内容),以及在何种条件下应开始跟踪(例如,特定的返回状态代码、提供页面所用的时间、事件严重性或组合条件)来搜索行为或错误的类型。
例如,假设用户报告某站点的加载时间过长。在任何情况下,此情形都难以重现,特别是当每小时有数千次点击时更是如此。使用“失败请求跟踪”,您只需添加跟踪规则,指定当页面加载时间超过某个指定时间量(例如,对于本例为两秒)时开始记录,之后便可以等待服务器自己去重现问题(请参阅图 5)。
图 5 使用“失败请求跟踪”进行故障排除 (单击该图像获得较大视图)
“失败请求跟踪”与传统日志记录的不同之处在于:前者仅在检测到特定的失败请求条件时才会进行记录。日志文件本身是具有 XML 样式表的 XML,从而使其清晰、易读。与大多数其他 IIS 7.0 功能类似,此功能在默认情况下不会安装,但可在安装的运行状况和诊断部分下找到。您还必须在 IIS 管理器中启用该功能。
对于所有管理员而言,IIS 7.0 是一大飞跃。它的新体系结构和功能为适应不断变化的环境提供了所需的敏捷性和灵活性。有了管理功能、向后兼容性工具和故障排除功能,您如今可以对其进行部署并在您的现有环境中使用它。
Isaac Roybal 是 Microsoft Windows Server 的产品经理。他负责 Windows Server 中与 Web 相关的所有事宜。Isaac 从 Windows NT 3.51 和 IIS 4.0 开始就从事 Windows Server 方面的工作。在此之前,他是 Office Internet 平台和运营组的运营项目经理。他已获得 Windows NT 4.0、Windows 2000 和 Windows Server 2003 的 MCSE 认证。