作者 :Saad Ladki

为托管方案配置失败的请求跟踪和日志记录

在用于托管方案的 UNC 共享上放置应用程序内容和代码在 Web 应用程序服务器上变得越来越重要。 在托管方案中,必须能够将日志与 Web 应用程序内容和代码一起保留。 日志包括失败的请求跟踪日志文件,以及网站 IIS 日志的命中日志。 本文档逐步讲解如何创建相应的目录、设置相应目录的正确权限,然后配置 IIS,了解如何将目录用于各种日志文件。

日志文件目录、用户帐户和权限设置的基本命名约定与此网站上也提供的“共享托管演练”文档一致。 本演练还区分了如何通过以下方法执行各种操作:

  • UI:使用 IIS 管理器或资源管理器执行操作
  • CMD:使用命令行 (PowerShell、AppCmd 等) 执行操作
  • XML:手动编辑配置以执行操作。
  • 为托管方案配置失败的请求跟踪

    失败的请求跟踪是一项功能强大的诊断功能,可帮助开发人员和管理员确定应用程序中出现的问题及其发生原因。 安装后失败的请求跟踪很难由计算机上非管理员的开发人员使用。 本部分可通过以下方式帮助设置可供开发人员访问的失败请求跟踪:

  • 解锁允许开发人员为其应用程序定义其自己的失败请求跟踪规则所需的部分
  • 设置失败的请求跟踪以登录到应用程序所有者的 UNC 共享
  • 将 <traceFailedRequests> 委派给非管理员

    请记住,失败请求跟踪的配置有两个不同的部分:

  • <traceFailedRequestsLogging> :此部分始终限制为 IIS 管理员。 本部分允许管理员启用或禁用站点的失败请求跟踪功能、配置日志文件的最大数目、日志文件大小以及日志文件所在的目录。 出于这些原因, (控制使用日志文件填充磁盘的能力,) 管理员必须保持对此部分的控制。
  • <traceFailedRequests> :本部分用于创建故障定义 - 要捕获跟踪的 URL,以及在哪些条件下将这些跟踪另存为 XML。 这是 我们将允许解锁的部分。
  • 安装失败的请求跟踪模块 (看到“使用跟踪对失败 的请求进行故障排除 ”IIS.net,以获取有关失败请求跟踪) 安装和基本用法的信息,该 <traceFailedRequests> 部分已设置为“读/写”权限。 这样,应用程序所有者就可以定义自己的失败请求跟踪规则,而无需管理员为其定义这些规则。

    UI:验证 <来自 IIS 管理器的 traceFailedRequests> 委派

    若要验证 <traceFailedRequests> 是否已为从 IIS 管理器 UI 进行委派设置,请执行以下操作:

  • 单击“开始”并键入 inetmgr。 如果还没有管理员,请输入管理员凭据。
  • 单击计算机名称,然后单击 功能委派。
  • 验证 失败的请求跟踪规则 是否已设置为 读/写
  • 这允许无权访问ApplicationHost.config的开发人员在应用程序web.config文件中创建自己的故障定义。 仅当管理员打开失败请求跟踪时,规则才会生效。

    XML:在 <ApplicationHost.config 中验证 traceFailedRequests> 委派

    若要验证 <traceFailedRequests> 是否已通过ApplicationHost.config设置委派,请执行以下操作:

  • 启动管理员提升的命令提示符。
  • 将目录更改为 %windir%\system32\inetsrv\config 并运行 notepad applicationHost.config
  • 在applicationHost.config中,搜索字符串 <节名称=“traceFailedRequests” - 如果此节为 overrideModeDefault=“Allow” ,则会委托此部分。
  • <configSections>
    ...other config sectionGroups...
      <sectionGroup name="system.webServer">
      ...other sections...
        <sectionGroup name="tracing">
          <section name="traceFailedRequests" overrideModeDefault="Allow" />
        </sectionGroup>
      </sectionGroup>
    </configSections>
    

    配置 UNC 共享和应用程序池 ID

    为了使 IIS 能够将其失败的请求日志文件写入 UNC 共享,必须在网络共享和 UNC 服务器上的文件系统路径上提供工作进程标识完全控制。 这是因为它必须能够列出目录内容、创建新的日志文件和目录以及删除旧日志文件。

    如果使用 IUSR 或网络服务 () 等内置帐户之一作为应用程序池 ID,则这些帐户在 UNC 服务器上显示为 ANONYMOUS。 强烈建议

  • 域用法 :为应用程序池创建域用户帐户,然后将该应用程序池 ID 用于 ACL,在失败请求日志文件所在的共享和文件系统目录中。 Web 服务器和 UNC 服务器都必须是域的成员。
  • 非域用法 :如果未将 UNC 和 Web 服务器加入域,则必须在每个计算机上创建具有相同帐户密码的同一帐户。 这是本演练中使用的示例。
  • UI:在 UNC 服务器和前端 Web 服务器上创建新的本地帐户

    应在 UNC 服务器和 Web 服务器上重复这些指示。 创建名为“PoolId1”的用户,其密码将为“!p4ssw0rd”

  • 在管理员提升的命令提示符下,运行 start lusrmgr.msc。

  • 右键单击 “用户 ”文件夹,然后选择“ 新建用户...”

  • 填写 “新建用户 ”对话框条目,如下所示:

  • 用户名: PoolId1

  • 密码 (& 确认密码) : !p4ssw0rd

  • 取消选中“用户下次登录时必须更改密码”

  • 选中“用户无法更改密码”

  • 单击“ 创建 ”,然后单击 “关闭”。

    请确保在前端 IIS Web 服务器上创建 PoolId1 用户,并将后端 UNC 服务器 & 创建。 还需要将 PoolId1 添加到前端 Web 服务器上的IIS_IUSRS组。 为此,请执行以下操作:

  • 单击 lusrmgr MMC snapin 上的 “组” 文件夹。
  • 右键单击 IIS_IUSRS 并选择“ 添加到组 ”。
  • 单击 “添加...” ,然后将 servername>\PoolId1 作为要添加的标识放入<
  • CMD:在 UNC 服务器和前端 Web 服务器上创建新的本地帐户

    若要从命令行添加新 PoolId1 标识,请执行以下操作:

  • 运行管理员提升的命令提示符。

  • 在命令提示符窗口中运行以下命令:

    net user PoolId1 !p4ssw0rd /ADD /passwordchg:no
    net localgroup IIS_IUSRS PoolId1 /ADD
    

    “net localgroup”命令仅在前端 Web 服务器上是必需的。

    UI:为网站创建新的应用程序池并更改其标识

    IIS 团队正在创建的共享托管指南的一部分是一个新的应用程序池;将其标识设置为刚刚创建的 PoolId1

  • 在 IIS 前端服务器上,运行 Start-Inetmgr>。
  • 在 UI 中单击“应用程序池”节点,然后在“操作->添加应用程序池...”下选择。
  • 使名称 Pool_Site1,单独保留所有其他设置,然后单击“ 确定”。
  • 右键单击 Pool_Site1 并选择“ 高级设置...”
  • “进程模型”下,选择 “标识 ”行,然后在 “... ”按钮上。
  • 单击“设置”按钮,配置自定义标识以匹配刚刚创建的用户标识 - PoolId1。再次单击“确定”,更改应用程序池的标识。 可看到:
  • 我们还必须将站点拖放到此应用程序池中。 对于本演练,请使用默认网站。 还可以通过INETMGR.exe为此 (SITE1) 创建新站点。 请执行以下操作:

  • 单击“网站”文件夹,然后在“默认网站”上。
  • 在右侧 “操作 ”窗格中,选择“ 基本设置...”
  • 应用程序池右侧: 单击 “选择...”
  • 选择刚刚创建的新 Pool_Site1 应用程序池,然后单击“ 确定”,然后再次 确定
  • CMD:为网站创建新的应用程序池并更改其标识

    若要从命令行执行上述步骤,请执行以下操作:

  • 启动管理员提升的命令提示符。

  • 若要添加新的应用程序池,请运行以下命令:

    %windir%\system32\inetsrv\appcmd add AppPool -name:Pool_Site1 -processModel.username:ERICDE-DELL-W\PoolId1 -processModel.password:!p4ssw0rd -processModel.identityType:SpecificUser
    

    若要将默认网站的根应用程序设置为在Pool_Site1中运行,请运行以下命令:

    %windir%\system32\inetsrv\appcmd set app -app.name:"Default Web Site/" -applicationPool:Pool_Site1
    

    为 UNC 共享创建和锁定 ACL

    现在创建并锁定 UNC 共享 & 其文件系统目录。

    CMD:为 UNC 共享创建 & 锁定 ACL

    在 UNC 服务器上执行以下操作:

  • 创建文件系统路径 (将其称为 内容) ,我们将转储内容。

  • 在该目录下,创建一个名为 Site1 的新目录,并在另一个名为 Logs 的目录下,以及名为 failedReqLogFiles 的最终目录。 应看到的内容是:

  • g:\content

  • Site1

  • failedReqLogFIles
  • 在 g:\content\Site1\Logs\failedReqLogFiles 上,设置文件系统路径上的权限,以授予 PoolId1 对日志目录的完全控制。 这是必需的,因为工作进程标识必须能够列出内容、写入新文件、创建新目录和删除旧文件。 若要从管理员提升的命令提示符执行此操作,请运行以下命令:

  • Windows Server® 2003 Fileserver:

    icacls g:\content\Site1\Logs\failedReqLogFiles /g PoolId1:F
    
  • Windows Server 2003 Fileserver:

    cacls g:\content\Site1\Logs\failedReqLogFiles /g PoolId1:F /e
    
  • 共享目录。在命令行中执行以下操作:

    net share content$=g:\content /GRANT:Users,CHANGE
    

    将失败的请求跟踪设置为记录到 UNC 路径

    共享共享后,已建立正确的权限,请配置失败的请求跟踪以登录到 UNC 路径。

    UI:配置失败的请求跟踪以记录到 UNC

    若要配置失败的请求跟踪以记录到 UNC 路径,请在 Web 服务器上按照以下说明操作:

  • 通过运行 Start-Inetmgr> 打开 INETMGR

  • 单击 “默认网站”,然后在“ 配置 ”下单击“ 失败的请求跟踪...”

  • 选中 “启用” 复选框。

  • “目录”下,键入 UNC 共享的路径 ->

    \\<UncServerName>\UNCContent\Site1\Logs\FailedReqLogFiles
    

    配置规则以捕获所有 200 年代的所有 URL,以便所有 内容 运行测试。

  • 再次在 INETMGR UI 中,展开 “网站 ”文件夹,然后单击“ 默认网站”。
  • 双击 “失败的请求跟踪规则”。
  • 在右侧 的操作 下,单击“ 添加...”
  • 单击“ 下一步”,并将状态代码设置为 200:
  • 单击 “下一步”,保留默认值以收集所有内容,然后单击“ 完成”。
  • XML:在 web.config 中配置失败的请求跟踪规则

    默认网站的web.config文件中的实际 XML 如下所示:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
      <system.webServer>
        <tracing>
          <traceFailedRequests>
            <add path="*">
              <traceAreas>
                <add provider="ASP" verbosity="Verbose" />
                <add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
                <add provider="ISAPI Extension" verbosity="Verbose" />
                <add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications" verbosity="Verbose" />
               </traceAreas>
              <failureDefinitions statusCodes="200" />
          </traceFailedRequests>
        </tracing>
      </system.webServer>
    </configuration>
    

    检查 UNC 后端

    浏览到我们设置的网站,将失败的请求跟踪规则记录到 UNC 路径, (说 http://uncsite/default.aspx) 。 检查要记录的 UNC 后端服务器目录。 请注意,在配置的失败请求日志文件目录中创建了名为 W3SVC1 的新目录。 浏览到该目录,并查看日志文件和 FREB.xsl 文件。

  •