【问题标题】:Detailed 500 error message, ASP + IIS 7.5500错误信息详解,ASP+IIS 7.5
【发布时间】:2011-02-08 02:11:30
【问题描述】:

IIS 7.5,2008rc2,经典 asp,500 错误消息:

由于发生内部服务器错误,页面无法显示。

我需要知道如何配置 IIS 以获得更详细的错误。
我已尝试将 ASP 配置中的所有调试选项设置为 true。
但这没有用。谁能帮帮我?

【问题讨论】:

标签: asp-classic error-handling iis-7.5


【解决方案1】:

我遇到了同样的问题并修复了same way as Alex K

因此,如果“向浏览器发送错误”不起作用,也可以这样设置:

错误页面 -> 500 -> 编辑功能设置 -> “详细错误”

另外请注意,如果返回的错误页面的内容很短,并且您使用的是 IE,IE 会很乐意忽略服务器返回的有用内容,而是向您显示它自己的通用错误页面。您可以在 IE 的选项中关闭此功能,或使用其他浏览器。

【讨论】:

  • 如果您的面板中缺少“错误页面”,请确保启用该功能:打开或关闭 Windows 功能 => WWW 服务、通用 HTTP 功能、[x] HTTP 错误
  • @fiat 要启用“错误页面”,我必须去:Turn Windows features on or off > Internet Information Services > World Wide Web Services > Common HTTP Features > [✓] HTTP Errors
  • 注意:"错误页面"".NET 错误页面" 是不同的。您特别想要“错误页面”
  • @JessTelford HOW-TO 用于 NET 错误页面
【解决方案2】:

如果你在远程服务器上,你可以像这样配置你的 web.config 文件:

<configuration>
<system.webServer>
    <httpErrors errorMode="Detailed" />
    <asp scriptErrorSentToBrowser="true"/>
</system.webServer>
<system.web>
    <customErrors mode="Off"/>
    <compilation debug="true"/>
</system.web>

【讨论】:

  • 实际上,&lt;system.webserver&gt; 设置对我来说已经足够了,谢谢。
  • 即使在运行经典 ASP 时,IIS 7+ 也会读取 system.webServer 部分
  • customErrors mode="Off" 为我做的
  • 不再需要使用customErrors(例如IIS 7+、ASP.NET、Classic AppPooltedgustaf.com/blog/2011/5/…
  • 确保在 'mode="Off" '中“Off”以大写“O”开头。它对我们来说是区分大小写的。
【解决方案3】:

在 IIS admin 中双击站点主屏幕中的“ASP”,展开“调试属性”,启用“将错误发送到浏览器”,然后单击“应用”。

在主屏幕的“错误页面”下选择“500”,然后选择“编辑功能设置”并选择“详细错误”。

请注意,相同的步骤适用于 IIS 8.0 (Windows Server 2012)。

【讨论】:

  • 可能适用于 IIS 7.5 、Windows 2008 R2、带有 CLASSIC AppPool 的 ASP.NET 4.5.1 (WebForms)(未集成)跨度>
【解决方案4】:

在尝试Vaclav'sAlex's 回答后,我仍然不得不在 IE 中禁用“显示友好的 HTTP 错误消息”

【讨论】:

    【解决方案5】:

    web.config 下的

    <system.webServer>
    

    替换(或添加)该行

    <httpErrors errorMode="Detailed"></httpErrors>
    

    <httpErrors existingResponse="PassThrough" errorMode="Detailed"></httpErrors>
    

    这是因为默认情况下 IIS7 会截获 HTTP 状态代码,例如由应用程序生成的 4xx 和 5xx。

    接下来,启用“ASP”部分下的“Send Errors to Browser”,并在“Error Pages / Edit Feature Settings”下选择“Detailed errors”。

    另外,将网站文件夹的写入权限授予 IIS_IUSRS 内置组。

    【讨论】:

    • 对于等效的 power shell 用户,运行:Set-WebConfigurationProperty '/system.WebServer/httpErrors' -Name errorMode -Value Detailed
    • 谢谢。那么web.config 会覆盖 IIS GUI 设置吗?
    【解决方案6】:

    TLDR:首先确定您从管道中的哪个位置收到错误(滚动查找与您的错误相似的截图),进行更改以获取新内容,然后重复。

    首先确定您实际看到的错误消息。

    如果您看到的文件位于此处...

    %SystemDrive%\inetpub\custerr\\500.htm

    ...通常看起来像这样:

    ...那么您知道您在 **IIS ** 中看到了当前配置的错误页面,并且您不需要更改 ASP.net customErrors 设置、asp 错误详细信息设置或“显示友好的 http 错误”浏览器设置。

    您可能希望查看上面引用的路径,而不是相信我的屏幕截图,以防万一有人更改它。

    “是的,我看到了上述错误...”

    在这种情况下,您会看到 httpErrors> 的设置,或者在 IIS 管理器中看到的是 Error Pages --> 编辑功能设置。在服务器节点级别(相对于站点级别)默认为 errorMode=DetailedLocalOnly,这意味着虽然您将在远程看到此配置的错误页面,但您应该能够在本地登录到服务器并查看完整的错误,应该如下所示:

    此时您应该拥有修复当前错误所需的一切。

    “但是我在服务器上浏览也没有看到详细的错误”

    这留下了几种可能性。

    1. 您在服务器上使用的浏览器配置为使用代理 在其连接设置中,因此它不会被视为“本地”。
    2. 您实际上并没有浏览到您认为正在浏览的站点 - 这通常在涉及负载平衡器时发生。执行 ping 检查以查看 dns 是否为您提供服务器或其他地方的 IP。
    3. 您网站的httpErrors 设置仅设置为“自定义”。将其更改为“DetailedLocalOnly”。但是,如果您有配置错误,这可能无法正常工作,因为站点级别的 httpErrors 也是一个配置项。在这种情况下,继续#4
    4. 所有站点的httpErrors 默认设置为“自定义”。在这种情况下,您需要单击 IIS 管理器(而不是特定站点)中的顶级服务器节点并将那里的httpErrors 设置更改为DetailedLocalOnly。如果这是一个内部服务器并且您不担心泄露敏感信息,您还可以将其设置为“详细”,这样您就可以从服务器以外的客户端查看错误。
    5. 您在服务器上缺少一个像 UrlRewrite 这样的模块(这个模块让我很苦恼,而且无论 httpErrors 设置如何,它通常都会给出通用消息)。

    “我不能登录服务器”

    将您网站的httpErrors 更改为“详细”,以便您可以远程查看。但如果它不起作用,您的错误可能已经是配置错误,请参阅上面的#3。因此,您可能会被 #4 或 #5 卡住,而您将需要服务器团队中的某个人。

    “我没有看到上面描述的错误页面。我看到了一些不同的东西”

    如果你看到这个...

    ...你希望看到这样的东西...

    ...然后您需要在 IIS 管理器中的站点 --> IIS --> ASP --> 调试属性下将“向浏览器发送错误”更改为 true

    如果你看到这个...

    或者这个……

    ...您需要在浏览器中禁用友好错误或使用 fiddler 的 webview 查看实际响应与浏览器选择显示的内容。

    如果你看到这个...

    ...然后自定义错误正在工作,但您没有自定义错误页面(当然此时谈论的是 .net 而不是经典的 asp)。您需要将 web.config 中的 customErrors 标记更改为 RemoteOnly 以在服务器上查看,或 Off 以远程查看。

    如果您看到样式与您的网站类似的内容,则自定义错误可能是 On 或 RemoteOnly 并且它正在显示自定义页面(例如 MVC 中的 Views->Shared->Error.cshtml)。也就是说,不太可能但有可能有人在 IIS 中更改了 httpErrors 页面,因此请参阅第一部分。

    【讨论】:

      【解决方案7】:

      尝试将“existingResponse”httpErrors 属性的值设置为“PassThrough”。我的设置为“替换”,导致 YSOD 不显示。

      <httpErrors errorMode="Detailed" existingResponse="PassThrough">
      

      【讨论】:

      • customErrors 用于 asp.net。 httpErrors 用于 IIS7,因此可以处理不通过 .net 处理程序的内容(例如 .png、.js 等)。如果您想要非 .net 内容类型的错误页面,请使用 IIS 错误页面(IIS7 的 httpErrors ,IIS6 的 UI。) customErrors 属性在 .net 代码抛出异常(404、403、500 等)时使用,而 httpErrors 属性在 IIS 本身抛出异常时使用。这是因为默认情况下 IIS7 会拦截 HTTP 状态代码,例如由应用程序生成的 4xx 和 5xx。
      【解决方案8】:

      没有人提到的一件事是非常快速和临时的修复,您可以在该 Web 服务器的 localhost 上查看错误。

      【讨论】:

      【解决方案9】:

      您还可以验证,如果您将主网站文件夹 (c:\inetpub\wwwroot) 更改为另一个文件夹,您必须在新文件夹中授予 IIS_IUSRS 组 读取权限。

      【讨论】:

        【解决方案10】:

        对于像我一样尝试了所有方法但无法显示错误详细信息的人来说,检查不同级别的配置是个好主意。我在网站级别和应用程序级别(网站内部)都有一个配置文件,两者都检查。此外,事实证明,我在 IIS 的最高节点上禁用了详细错误(就在起始页下方,它的名称与网络服务器计算机名相同)。检查那里的错误页面。

        【讨论】:

          【解决方案11】:

          找到了。

          http://blogs.iis.net/ksingla/archive/2009/02/16/iis-7-5-updates-to-custom-errors-and-compression.aspx

          以管理员身份运行 cmd,进入你的 system32\inetsrv 文件夹并执行:

          appcmd.exe set config -section:system.webServer/httpErrors -allowAbsolutePathsWhenDelegated:true
          

          现在我可以看到详细的 asp 错误了。

          【讨论】:

            【解决方案12】:

            如果您在服务器中运行浏览器并使用本地 ip 测试您的项目 url,您将收到该项目的所有错误,而没有一般错误页面(例如 500 错误页面)。

            【讨论】:

              【解决方案13】:

              就我而言,这是权限问题。 打开应用程序文件夹属性 -> 安全选项卡 -> 编辑 -> 添加

              • IIS AppPool\[DefaultAppPool 或任何其他应用程序池](如果使用 ApplicationPoolIdentity 选项)
              • IUSRS
              • IIS_IUSRS

              【讨论】:

                【解决方案14】:

                仔细检查您正在测试的 asp 文件的编码

                例如,如果您在 Windows Server Core 2019 上创建了如下文件:

                echo "&lt;%@ LANGUAGE=Javascript %&gt;" &gt; test.asp

                echo "&lt;%Response.Write("test");%&gt;" &gt;&gt; test.asp

                然后 test.asp 将被编码为 Unicode,请求它会产生一个没有任何细节的 500。

                做一个notepad test.asp,然后点击“另存为...”并选择“ANSI”编码来修复它。

                【讨论】:

                  猜你喜欢
                  • 2012-04-14
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多