使用 IIS 7 中的跟踪排查失败的请求
适用于: Internet Information Services 7.0
注意
本文适用于 IIS 7.0。 有关较新版本,请参阅 使用 IIS 8.5 中的跟踪排查失败的请求。
基于请求的跟踪可在独立 IIS 服务器和 Azure Web 应用中使用,并提供一种方法来确定请求的确切发生情况以及原因(如果可以重现所遇到的问题)。 一些问题(例如,一些请求的性能差,其他请求出现身份验证相关故障,或来自 ASP 或 ASP.NET 的服务器 500 错误)很难排查,除非你在问题发生时捕获了跟踪。 本文讨论 IIS 服务器上的失败请求跟踪。 有关使用 Azure Web 应用执行此操作的信息,请参阅使用 Visual Studio 对 Azure 应用服务中的应用进行故障排除。
失败的请求跟踪旨在缓冲请求的跟踪事件,并且仅在请求失败时将其刷新到磁盘,在该请求中提供“失败”的定义。 如果想知道为何收到 404.2 错误消息或请求开始挂起,请使用失败的请求跟踪。
本文中阐释的任务包括:
- 启用失败的请求跟踪模块。
- 配置失败的请求跟踪日志文件语义。
- 定义要保留失败请求跟踪的 URL,包括失败定义和要跟踪的区域。
- 生成失败条件并查看生成的跟踪。
先决条件
安装 IIS
你必须先安装 IIS 7 或更高版本,然后才能执行本文中的任务。 浏览到 http://localhost/
查看是否已安装 IIS。 如果未安装 IIS,请参阅 在 Windows Server 2008 上安装 IIS,了解安装说明。 安装 IIS 时,请确保还安装以下功能:
- ASP.NET(在万维网服务 - 应用程序开发功能 - ASP.NET 下)
- 跟踪(在万维网服务 - 运行状况和诊断 - 跟踪下)
以管理员身份登录
确保用于登录的帐户是管理员帐户或者在管理员组中。
注意
默认情况下,“管理员”组中不会授予你完整的管理员用户权限。 你必须以管理员身份运行应用程序,可以通过右键单击应用程序图标并选择“ 以管理员身份运行”来执行此操作。
进行备份
在执行以下部分中的任务之前,必须备份配置。
若要备份配置,请执行以下步骤:
选择“启动>所有程序>附件”。
右键单击 命令提示符,然后选择“ 以管理员身份运行”。
在命令提示符下,运行以下命令:
%windir%\system32\inetsrv\appcmd add backup cleanInstall
创建示例内容
导航到
%systemdrive%\inetpub\wwwroot
。将内容移动到安全的位置(如果想要还原现有内容),或删除它。
创建一个空白文件并将其命名 为test.asp。
在命令提示符中,导航到 \inetpub\wwwroot 中的test.asp文件。
在 test.asp 文件中,粘贴以下内容:
<h2>Failed Request Tracing Lab</h2><br> <br>Today's date is <% response.write(Date()) %>
禁用 ASP
必须为此任务禁用 ASP。 仅为了本文中的任务,作为示例而禁用 ASP。
禁用 ASP
打开“Internet Information Services (IIS)管理器” 。
双击“ISAPI 和 CGI 限制”。
选择“Active Server Pages”。 在“操作”窗格中,选择“拒绝”以禁用 ASP。
启用失败请求跟踪
启用失败请求跟踪后,需要配置日志文件所在的位置。 在此任务中,你将为默认网站启用失败请求跟踪,并指定将日志文件放在何处。 然后,你将配置要为其生成失败日志的失败。
步骤 1:为站点启用失败的请求跟踪并配置日志文件目录
使用管理员用户权限打开命令提示符,并导航到 %systemdrive%\windows\system32\inetsrv。
运行
inetmgr
以打开 IIS 管理器。在 “连接 ”窗格中,展开计算机名称,展开 “站点”,然后选择“ 默认网站”。
在“操作”窗格中的“配置”下,选择“失败的请求跟踪”。
在“编辑网站失败请求跟踪设置”对话框中,配置以下设置:
- 选中“启用”复选框。
- 保留其他设置的默认值。
选择“确定”。
现已为默认网站启用失败的请求跟踪日志记录。 检查 %windir%\system32\inetsrv\config\applicationHost.config 文件以确认配置如下所示:
<system.applicationHost>
<sites>
<!-- site & app defaults -->
<site name="Default Web Site" id="1">
<!-- other site configuration -->
<traceFailedRequestsLogging enabled="true" />
</site>
</sites>
</system.applicationHost>
步骤 2:配置失败定义
在此步骤中,将配置 URL 的失败定义,包括要跟踪的区域。 对于尚未启用的扩展的任何请求,IIS 将排查 IIS 返回的 404.2 问题。 这有助于确定需要启用的特定扩展。
使用管理员用户权限打开命令提示符,并导航到 %systemdrive%\windows\system32\inetsrv。
运行
inetmgr
以打开 IIS 管理器。在 “连接 ”窗格中,展开计算机名称,展开 “站点”,然后选择“ 默认网站”。
双击“失败请求跟踪规则”。
选择“完成”。
在 “操作 ”窗格中,选择“ 添加”。
在“添加失败的请求跟踪规则”向导中,在“指定要跟踪的内容”页上选择“所有内容(*)”。 选择下一步。
在 “定义跟踪条件 ”页上,选中“ 状态代码” 复选框,并输入 404.2 作为要跟踪的状态代码。
选择下一步。
在“选择跟踪提供程序”页上的“提供程序”下,选中“WWW 服务器”复选框。 在“区域”下,选中“安全”复选框并清除所有其他复选框。
生成的问题会导致引发安全错误跟踪事件。 通常,可以使用 WWW 服务器 - 安全区域配置来诊断身份验证和授权(包括 ISAPI 限制列表问题)问题。 但是,由于 FREB.xsl 样式表有助于突出显示错误和警告,因此仍可以使用默认配置记录所有区域和提供程序中的所有事件。 在“详细程度”下,选择“详细”。
选择“完成”。 你将看到默认网站的以下定义:
IIS 管理器使用 %windir%\system32\inetsrv\config\applicationHost.config
标记将配置写入 <location>
文件。 配置应如下所示:
<location path="Default Web Site">
<system.webServer>
<tracing>
<traceFailedRequests>
<add path="*">
<traceAreas>
<add provider="WWW Server" areas="Security" verbosity="Verbose" />
</traceAreas>
<failureDefinitions statusCodes="404.2" />
</add>
</traceFailedRequests>
</tracing>
</system.webServer>
</location>
测试和查看失败请求日志文件
在此任务中,你将生成失败的请求并查看生成的跟踪日志。 你已将 IIS 配置为捕获 http://localhost/*.asp
请求(失败,且 HTTP 响应代码为 404.2)的跟踪日志。 现在,验证此操作是否有效。
步骤 1:生成错误和失败请求日志文件
打开新的 Internet Explorer 窗口。
输入以下地址:
http://localhost/test.asp
出现“HTTP 错误 404.2 - 找不到”错误。
步骤 2:查看失败请求日志文件
生成失败请求后,请打开具有管理员用户权限的命令提示符,并导航到 %systemdrive%\inetpub\logs\FailedReqLogFiles\W3SVC1。
运行 start,从目录中启动 Internet Explorer 窗口。
请注意以下几点:当 IIS 写入失败请求日志文件时,它为每个失败请求写入一个文件。 还写入一个 freb.xsl 样式表,每个目录一个。 当你查看生成的失败请求日志文件(如 此示例中的fr000001.xml )时,这很有帮助。
右键单击 404.2 错误的日志文件,然后选择“使用>Internet Explorer 打开”。 如果这是你第一次打开失败的请求跟踪文件,则必须将 about:internet 添加到受信任的站点列表中,因为 Internet Explorer 的增强安全配置默认处于启用状态。 如果是这样,你将看到以下内容:
在 Internet Explorer 对话框中,选择“添加...”,将 about:internet 添加到受信任的站点列表。 这使 XSL 能正常工作。 将 about:internet 添加到受信任的站点列表后,你将看到以下内容:
失败请求的摘要记录在顶部,“错误和警告”表标识严重性中存在警告、错误或严重性错误的任何事件。 在此示例中, WARNING 严重性级别是由于 ISAPI 限制造成的。 您尝试加载的图像为 %windir%\system32\inetsrv\asp.dll。
使用文本编辑器直接打开原始 XML 文件,查看每个事件的内容。
总结
已完成两项任务:已配置失败请求跟踪,以捕获 IIS 返回具有 404.2 状态代码的任何请求的跟踪,并验证 IIS 是否已捕获请求的跟踪。 你还验证 了freb.xml 日志文件不包含对所发出的请求的任何其他请求,因为请求没有 404.2 返回代码。 在查阅失败日志文件时,你确定失败的原因是为该请求禁用了扩展。 可以尝试其他非 HTML 页面(如.gif或.jpg文件),请注意日志文件不会添加这些跟踪。 还可以通过在 failureDefinitions 中设置 timeTaken 字段,轻松将其更改为 404,或者捕获失败(如果请求花费的时间超过 30 秒)。
还原备份
完成本文中的任务后,可以还原配置的备份。 使用管理员用户权限运行以下命令:
%windir%\system32\inetsrv\appcmd restore backup cleanInstall