了解 IIS 7 上的站点、应用程序和虚拟目录

作者:里根·坦普林

介绍

在 IIS 中,可以创建站点、应用程序和虚拟目录,以便通过 Internet、Intranet 或 Extranet 与用户共享信息。 尽管这些概念存在于早期版本的 IIS 中,但 IIS 7 及更高版本中的一些更改会影响这些概念的定义和功能。 最重要的是,站点、应用程序和虚拟目录现在在分层关系中协同工作,作为用于托管联机内容和提供联机服务的基本构建基块。

本文简要概述了 IIS 6.0 中的应用程序,以便你更好地了解 IIS 7 中引入的差异。 然后,它介绍了 IIS 中站点、应用程序和虚拟目录的概念,并介绍了配置中的 <sites> 部分。

关于 IIS 6.0 中的站点、应用程序和虚拟目录

在 IIS 6.0 中,虚拟目录和应用程序的概念令人困惑。 尽管它们作为单独的概念被讨论(从功能角度而言,存在概念上的差异),但应用程序并非在物理上与虚拟目录分开的对象。 在 IIS 6.0 中,应用程序实际上只是一个虚拟目录,其中包含元数据库中以下属性的一个或多个属性:AppFriendlyNameAppRootAppIsolatedAppPoolID

注意

网站根是一个例外,因为它被隐式视为应用程序,即使未设置这些属性。

与扩展 Web 服务器功能的技术(如 Active Server Pages (ASP)、Internet Server 应用程序编程接口 (ISAPI) 和 ASP.NET)相比,应用程序对 IIS 不太重要。 这些技术为 IIS 6.0 中托管的应用程序提供了其他功能和处理功能,使开发人员能够创建更复杂的应用程序。 IIS 6.0 的一个重要问题是隔离此类应用程序,从而阻止一个应用程序池中的应用程序影响服务器上的另一个应用程序池中的应用程序。

关于 IIS 7 及更高版本中的站点、应用程序和虚拟目录

IIS 7 及更高版本正式化了站点、应用程序和虚拟目录的概念。 虚拟目录和应用程序现在是单独的对象,它们存在于 IIS 配置架构中的分层关系中。 简言之,站点包含一个或多个应用程序,应用程序包含一个或多个虚拟目录,虚拟目录映射到计算机上的物理目录。

与 IIS 6.0 一样,站点包含与该站点关联的所有内容(静态和动态)。 但是,每个站点必须至少包含一个名为根应用程序的应用程序。 每个应用程序(包括根应用程序)必须至少包含一个虚拟目录,该目录名为根虚拟目录。 这些对象协同工作以形成网站。

此外,在 IIS 7 及更高版本中,应用程序的概念现在对 IIS 和扩展 IIS 功能的技术都有意义。 应用程序是运行时服务器重要的对象。 这是因为 IIS 和 ASP.NET 请求处理管道已合并到 IIS 7 及更高版本中,以便内容可以利用以前仅为托管代码应用程序提供的功能。 例如,每个托管代码应用程序在应用程序域 (AppDomain) 中运行。 一个应用程序可以有多个虚拟目录,每个目录将由与其所属的应用程序相同的 AppDomain 提供服务。

以下部分更详细地介绍了站点、应用程序、虚拟目录及其相关配置。

站点

站点是应用程序和虚拟目录的容器,可以通过一个或多个唯一绑定进行访问。

绑定包含两个对通信非常重要的属性:绑定协议绑定信息。 绑定协议定义服务器和客户端之间通信的协议。 绑定信息定义用于访问站点的信息。 例如,网站的绑定协议可以是 HTTP 或 HTTPS,绑定信息是 IP 地址、端口和可选主机标头的组合。

如果站点需要不同的协议或绑定信息,则网站可能包含多个绑定。 在早期版本的 IIS 中,仅支持 HTTP 和 HTTPS 协议。 例如,当站点的部分内容需要通过 HTTPS 进行安全通信时,网站可能同时具有 HTTP 绑定和 HTTPS 绑定。

在 IIS 7 及更高版本中,绑定可以应用于任何协议。 Windows 进程激活服务 (WAS) 是一项新服务,使 IIS 能够使用其他协议。 此服务保留熟悉的 IIS 6.0 进程模型,例如应用程序池和基于消息的进程激活,以及托管功能,例如快速故障保护、运行状况监视和回收。 但是,WAS 从激活体系结构中删除了对 HTTP 的依赖项。 这对于通过标准协议在 Web 服务中提供应用程序间通信的技术非常有用。 Windows Communication Foundation (WCF) 编程模型就是一种这样的技术,可用于通过传输控制协议 (TCP)、Microsoft 消息队列 (MSMQ) 和命名管道的标准协议进行通信。 这样,使用通信协议的应用程序就可以利用 IIS 功能,例如进程回收、快速故障保护和以前仅适用于基于 HTTP 的应用程序的配置。 有关 WCF 编程模型的详细信息,请参阅 MSDN 上的 Windows Communication Foundation

除了包含应用程序(其中包含虚拟目录)和指定绑定之外,以下配置设置还属于站点:

  • 限制:配置相关设置以限制带宽量、连接数或站点连接所允许的时间量。
  • 日志记录:配置相关设置以处理和存储站点日志文件。
  • 失败请求跟踪日志:配置设置以记录站点的失败请求跟踪。

应用程序

应用程序是一组文件,通过协议(如 HTTP)提供内容或提供服务。 在 IIS 中创建应用程序时,应用程序的路径将成为站点 URL 的一部分。

在 IIS 7 及更高版本中,每个站点都必须有一个名为根应用程序或默认应用程序的应用程序。 但是,站点可以有多个应用程序。 例如,你可能有一个在线商业网站,其中包含多个应用程序,例如购物车应用程序,它允许用户在购物期间收集物品,以及登录应用程序,它允许用户在购买时重新取回保存的付款信息。

除了属于站点之外,应用程序还属于应用程序池,该应用程序池将应用程序与服务器上的其他应用程序池中的应用程序隔离开来。 对于托管代码应用程序,请确保将应用程序与运行应用程序所需的 .NET Framework 版本的应用程序池相关联。

如本文的“站点”部分所述,IIS 默认支持 HTTP 和 HTTPS,但你可以使用其他协议。 对于每个网站,请指定一个或多个绑定来与网站中的内容通信和访问内容。 若要使应用程序能够使用父站点绑定中指定的协议进行通信,必须启用该协议。 为此,请在应用程序的 enabledProtocols 属性中指定协议,并确保在服务器上具有适当的侦听器适配器,并在配置中的 <listenerAdapters> 部分中指定。

虚拟目录

虚拟目录是在 IIS 中指定的目录名称(也称为路径),并映射到本地或远程服务器上的物理目录。 然后,目录名称将成为应用程序的 URL 的一部分,用户可以从浏览器请求 URL 以访问物理目录中的内容,例如网页或其他目录和文件列表。 如果为虚拟目录指定的名称与物理目录不同,则用户会更难发现服务器上的实际物理文件结构,因为 URL 不会直接映射到站点的根目录。

在 IIS 7 及更高版本中,每个应用程序都必须有一个虚拟目录,该目录名为根虚拟目录,并将应用程序映射到包含应用程序内容的物理目录。 但是,一个应用程序可以有多个虚拟目录。 例如,如果希望应用程序包含文件系统中其他位置的映像,但不希望将映像文件移动到映射到应用程序的根虚拟目录的物理目录中,则可以使用虚拟目录。

默认情况下,IIS 使用虚拟目录映射到的物理目录以及该物理目录下任何子目录中的 Web.config 文件中的配置。 如果不想在子目录中使用 Web.config 文件,请为虚拟目录中的 allowSubDirConfig 属性指定 false

(可选)如果需要指定凭据和访问虚拟目录的方法,可以为 usernamepasswordlogonMethod 属性指定值。

IIS 配置:<sites> 部分

查看 IIS 7 及更高版本中的默认 <sites> 部分。 这是在 Windows Server® 2008 上安装 IIS 后 ApplicationHost.config 文件中的内容(位于 %windir%\system32\inetsrv\config\)。

<sites> 
    <site name="Default Web Site" id="1"> 
        <application path="/"> 
            <virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\wwwroot" /> 
        </application> 
        <bindings> 
            <binding protocol="http" bindingInformation="*:80:" /> 
        </bindings> 
    </site> 
    <siteDefaults> 
        <logFile logFormat="W3C" directory="%SystemDrive%\inetpub\logs\LogFiles" /> 
        <traceFailedRequestsLogging directory="%SystemDrive%\inetpub\logs\FailedReqLogFiles" /> 
    </siteDefaults> 
    <applicationDefaults applicationPool="DefaultAppPool" /> 
    <virtualDirectoryDefaults allowSubDirConfig="true" /> 
</sites>

在路径字段中看到单个“/”时,便可以知道这是根对象。 根据它位于应用程序还是虚拟目录部分,可以确定它是根应用程序还是根虚拟目录。

默认元素

以下部分列出了 <sites> 部分中的集合和元素,以及它们在 <sites> 部分内的层次结构关系。

<sites> section 
<site> collection 
<bindings> collection 
<binding> element 
<clear> element 
<limits> element 
<logFile> element 
<traceFailedRequestsLogging> element 
<application> collection 
<virtualDirectory> collection 
<virtualDirectoryDefaults> element 
<applicationDefaults> element 
<virtualDirectoryDefaults> element 
<siteDefaults> element 
<bindings> collection 
<binding> element 
<clear> element 
<limits> element 
<logFile> element 
<traceFailedRequestsLogging> element 
<applicationDefaults> element 
<virtualDirectoryDefaults> element

请注意,有两个元素出现在多个位置:<applicationDefaults> 元素和 <virtualDirectoryDefaults> 元素。 还有一个 <siteDefaults> 元素,尽管它只显示一次,因为它只能在 <sites> 部分的一个位置进行配置。 默认元素很特殊,因为它们使你可以为属性配置默认值,而不必在每个集合中重复相同的值。

在多个级别配置属性时,将使用最低级别的值。 例如,如果在 <sites> 部分和 <site> 集合中的 <applicationDefaults> 元素中指定默认值,将使用 <site> 集合中的值。 此外,如果在默认元素和对象集合中配置了相同的属性或子元素,则使用集合中的值。 例如,如果在 <applicationDefaults> 元素和 <application> 集合中配置属性,将使用 <application> 集合中的值。

下表指定可以配置 <applicationDefaults> 元素的父元素,并描述值对应用程序的影响。

父元素 说明
<sites> 部分 指定服务器上的所有应用程序的默认设置。
<site> 集合 指定父站点中所有应用程序的默认设置。

下表指定可以配置 <virtualDirectoryDefaults> 元素的父元素,并描述值对虚拟目录的影响。

父元素 说明
<sites> 部分 指定服务器上的所有虚拟目录的默认设置。
<site> 集合 指定父站点中所有虚拟目录的默认设置。
<application> 集合 指定父应用程序中所有虚拟目录的默认设置。

总结

现在,你应该更好地了解 IIS 7 及更高版本中的站点、应用程序和虚拟目录。 与 IIS 6.0 不同,应用程序和虚拟目录在配置中已成为不同的对象,这突出显示了它们对 Web 服务器的唯一用途以及与站点的关系。 此外,站点现在可以包含使用 HTTP 和 HTTPS 以外的协议的应用程序,这些协议扩展了站点功能,同时保留了 IIS 6.0 中引入的处理模型的优势。

有关 WAS 和 IIS 体系结构的详细信息,请参阅 IIS.NET 上的 IIS 请求处理体系结构。 有关本文中讨论的配置设置的详细信息,请参阅 MSDN 上的 IIS 7 设置架构