203

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

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

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

4

14 回答 14

246

我遇到了同样的问题,并以与 Alex K 相同的方式解决了问题。

因此,如果“将错误发送到浏览器”也不起作用,则设置如下:

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

在此处输入图像描述

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

于 2010-05-04T13:43:44.167 回答
97

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

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

于 2011-01-17T15:35:19.237 回答
51

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

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

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

于 2010-04-14T20:01:39.363 回答
44

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

在此处输入图像描述

于 2013-02-21T17:43:11.153 回答
23

web.config

<system.webServer>

替换(或添加)该行

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

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

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

接下来,在“ASP”部分下启用“将错误发送到浏览器”,在“错误页面/编辑功能设置”下,选择“详细错误”。

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

于 2014-09-26T12:43:56.397 回答
23

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

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

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

%SystemDrive%\inetpub\custerr<语言标签>\500.htm

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

IIS 默认 500 错误

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

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

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

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

详细的 HTTP 错误

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

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

这留下了几种可能性。

  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

如果你看到这个...

即友好错误1

或这个...

即友好错误2

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

如果你看到这个...

启用自定义错误

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

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

于 2017-06-30T16:47:44.443 回答
9

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

<httpErrors errorMode="Detailed" existingResponse="PassThrough">
于 2011-08-26T15:21:35.460 回答
7

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

于 2013-04-11T16:51:11.703 回答
3

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

于 2011-05-30T14:15:03.823 回答
3

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

于 2017-02-13T10:34:49.663 回答
1

找到了。

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 错误了。

于 2010-04-14T20:32:04.523 回答
1

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

于 2018-03-09T15:00:26.290 回答
0

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

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

echo "<%@ LANGUAGE=Javascript %>" > test.asp

echo "<%Response.Write("test");%>" >> test.asp

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

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

于 2021-12-31T13:05:43.290 回答
0

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

  • IIS AppPool\[DefaultAppPool or any other apppool](如果使用 ApplicationPoolIdentity 选项)
  • IUSRS
  • IIS_IUSRS
于 2020-08-27T10:30:34.710 回答