为共享托管预配 IIS 7 站点

作者:Walter Oliver

以下文章包含有关在共享托管环境中预配站点的建议。

配置日志记录和诊断

概述

IIS 7 提供与 IIS 6.0 相同的网站活动或流量日志记录,但包含新的失败请求跟踪功能。 基于请求的跟踪提供了一种方法来确定请求发生的情况,使你可以在 IIS 处理请求时查看请求的每个步骤。

问题(例如性能不佳或身份验证失败,甚至是来自 ASP 或 ASP.NET 的服务器错误 500)可能很难进行故障排除。 失败请求跟踪会缓冲请求的跟踪事件,并在发生故障时将它们写入磁盘。 服务器管理员使用跟踪规则定义失败。 跟踪规则可以像所有内容和状态代码一样广泛,也可以特定于单个状态和子状态代码(如 404.2)。

对于共享托管,建议将失败请求跟踪委派给站点所有者,使站点所有者能够确定其站点的问题,这有助于防止支持调用。 可以在 logs\FailedRequestLogFiles 文件夹中存储跟踪日志,如“设置用于内容存储的远程文件服务器”部分中的“配置共享和 NTFS 权限”主题中所述。

配置过程

失败请求跟踪

若要使用命令行配置失败请求跟踪日志文件位置,请使用以下方法:

  • 打开命令提示符并运行以下命令:
%windir%\system32\inetsrv\AppCmd set config <sitename> -section:traceFailedRequestsLogging.directory:\\remotefileserver\content$\<sitename>\logs\failedRequestLogfiles

此外还建议为 W3SVC 日志记录配置所有日志记录字段。 出现问题时,可能需要 W3SVC 日志记录信息。

有关失败请求跟踪的详细信息,请参阅失败请求跟踪演练

日志文件位置

若要使用命令行配置 W3SVC 日志文件位置,请使用以下方法

  • 打开命令提示符并运行以下命令:
%windir%\system32\inetsrv\AppCmd set config <sitename> -section:-logfile.directory:\\remotefileserver\content$\<sitename>\logs\logfiles

有关诊断的详细信息,请参阅 Web 服务器错误故障排除

启用委派管理用户

IIS 管理器让托管或管理网站的人能够将管理控制权限委派给开发人员或内容所有者,由此减少服务器管理员的拥有成本和管理负担。

过程

若要使用 IIS 管理器为网站启用委派用户,请使用以下步骤

  1. 导航到“管理工具”,然后单击“Internet Information Services (IIS) 管理器”。
  2. 展开服务器名称节点。
  3. 展开“站点”节点。
  4. 双击要在其上启用用户的站点的名称。
  5. 双击“IIS 管理器权限”图标。
  6. 在“操作”窗格中,单击“允许用户...”。
  7. 在“允许用户”对话框中,选择是使用 Windows 用户还是 IIS 管理器用户。 在此例中,选择一个 Windows 用户,键入名称,然后单击“确定”。

有关委派的详细信息,请转到配置远程管理和功能委派概述。

使用应用程序池隔离站点

每个应用程序都驻留在其自己的应用程序池中,并配置了唯一的进程标识,这提供了最高级别的隔离。 每个应用程序都有自己的进程,如果应用程序停止响应,则它无法影响服务器上的其他站点。 出于这些原因,建议将此配置用于共享托管环境。

IIS 7 改进

IIS 7 引入了配置隔离服务,它会阻止应用程序池访问 applicationHost.config 文件。 启动后,IIS 7 会读取 applicationHost.config 文件,并为包含该池的配置的每个应用程序池写入一个临时文件。 工作进程仅有权访问该文件,而不能访问其他池配置文件。 此功能提供了增强的安全性和性能改进。

有关应用程序池的信息,请参阅“IIS 7 应用程序池”部分中的 IIS 7 体系结构简介

配置 ASP.NET 临时编译目录

目录代码

默认情况下,临时编译目录为:

"%windir%\Microsoft.NET\Framework\{version}\Temporary ASP.NET Files"

此目录包含由 ASP.NET 生成的所有临时文件。 此目录在所有应用程序池之间共享。 如果多个互不受信任的应用程序池将共存在同一主机上,那么主机管理员应为每个应用程序池配置单独的编译目录。

创建和设置目录

若要创建和设置唯一的临时编译目录,请使用以下方法:

  1. 打开命令提示符并运行以下命令以创建文件夹并设置权限:

    md %systemdrive%\inetpub\tempcompilation\aspnettemp\<sitename>
    
    cacls %systemdrive%\inetpub\tempcompilation\aspnettemp\<sitename> /G AppPoolUsername:F Administrators:F System:F
    
  2. 运行以下命令,将临时编译目录设置为站点:

    %windir%\system32\inetsrv\appcmd set config "<sitename>" -section:compilation -tempDirectory:%systemdrive%\inetpub\tempcompilation\aspnettemp\site%1 /commit:webroot