500错误信息详解,ASP+IIS 7.5

Posted

技术标签:

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

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

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

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

【问题讨论】:

我使用不同的方式在文本文件中记录错误:***.com/questions/20475502/… 主要区别——错误信息将存储在文本文件中 【参考方案1】:

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

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

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

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

【讨论】:

如果还是不行,disable friendly http error messages 如果您的面板中缺少“错误页面”,请确保启用该功能:打开或关闭 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 AppPool)tedgustaf.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's 和Alex'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,这意味着虽然您将在远程看到此配置的错误页面,但您应该能够在本地登录到服务器并查看完整的错误,应该如下所示:

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

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

这留下了几种可能性。

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

【讨论】:

如果选择了Vaclav's answer中可见的第三个选项。【参考方案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”编码来修复它。

【讨论】:

以上是关于500错误信息详解,ASP+IIS 7.5的主要内容,如果未能解决你的问题,请参考以下文章

自定义异步 HTTP 处理程序仅在 IIS 7.5 集成模式下生成错误 500 - 为啥?

IIS 7.5 上的 ASP.NET MVC

IIS 7.5 上的 ASP.NET MVC

在 IIS 7.5 上运行 ASP Classic

asp.net http 400 错误的请求怎么解决

iis的500错误?