详细的500个错误消息,ASP + IIS 7.5

IIS 7.5, 2008rc2,经典asp, 500错误提示:

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

我需要知道如何配置IIS以获得更详细的错误 我已经尝试将ASP配置中的所有调试选项设置为true 但这并没有起作用。有人能帮帮我吗?< / p >

358703 次浏览

在IIS管理的站点主界面双击“ASP”,展开“调试属性”,启用“发送错误到浏览器”,点击“应用”。

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

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

找到了。

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

我也遇到了同样的问题,并修复了和Alex K一样

因此,如果“发送错误到浏览器”是无效的,也设置这个:

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

enter image description here

还要注意的是,如果返回的错误页面内容很短,而你使用的是IE, IE会很乐意忽略服务器返回的有用内容,而是显示自己的通用错误页面。你可以在IE的选项中关闭这个选项,或者使用不同的浏览器。

如果你在远程服务器上,你可以配置你的网页。配置文件如下:

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

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

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

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

在尝试瓦茨拉夫·的亚历克斯的回答后,我仍然不得不在IE中禁用“显示友好的HTTP错误消息”

enter image description here

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

. config

<system.webServer>

替换(或添加)行

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

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

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

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

同样,将网站文件夹中的写权限交给IIS_IUSRS内置组。

对于那些尝试了所有方法却无法显示错误细节的人,比如我,检查不同级别的配置是个好主意。我有一个配置文件在网站级和应用程序级(在网站内)检查两者。另外,结果是,我在IIS中最高的节点上禁用了详细错误(就在开始页下面,它的名称与web服务器的计算机名相同)。检查那里的错误页面。

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

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

如果你看到的文件位于这里…

% SystemDrive % \ inetpub \ custerr< LANGUAGE-TAG> \ 500. htm

...通常是这样的:

IIS默认500错误

**那么你知道你在IIS **中看到了当前配置的错误页面,你不需要更改ASP.net customErrors设置,asp错误细节设置,或"show friendly http errors"浏览器设置。

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

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

在本例中,你看到的是<httpErrors>或者在IIS管理器中是错误页面—>编辑功能设置。这个的默认值是errorMode=DetailedLocalOnly在服务器节点级别(相对于站点级别),这意味着当你在远程时看到这个配置的错误页面时,你应该能够在本地登录到服务器并看到完整的错误,它应该看起来像这样:

详细HTTP错误

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

“但我没有看到详细的错误,甚至在服务器上浏览”;

这就留下了几种可能性。

  1. 您在服务器上使用的浏览器已配置为使用代理 在其连接设置中,因此它不会被视为“;local"”。
  2. 你实际上并没有浏览到你认为你正在浏览的网站——这通常发生在有负载均衡器的情况下。做一个ping检查,看看dns是否在服务器或其他地方给了你一个IP。
  3. 您的站点的httpErrors设置设置为“定制”;只有。将其改为“DetailedLocalOnly"”。但是,如果您有一个配置错误,这可能无法工作,因为站点级别的httpErrors也是一个配置项。在这种情况下,继续执行第4条
  4. 所有网站的默认httpErrors设置为“custom”。在这种情况下,你需要单击IIS管理器中的顶级服务器节点(而不是特定的站点),并将那里的httpErrors设置更改为DetailedLocalOnly。如果这是一个内部服务器,并且您不担心泄露敏感信息,您也可以将其设置为“详细”;这将允许您从客户端而不是服务器端查看错误。
  5. 您在服务器上缺少一个模块,比如UrlRewrite(这个模块让我很头疼,它经常给出通用消息,而不管httpErrors设置)。

“登录服务器不是我的选择”;

将你网站的httpErrors改为" details "所以你可以远程看到它。但如果它不起作用,您的错误可能已经是配置错误,请参阅上面的#3。因此,您可能会受困于#4或#5,您将需要来自服务器团队的人员。

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

如果你看到这个…

enter image description here

...你期望看到这样的东西…

enter image description here

...那么你需要更改“发送错误到浏览器”;在IIS管理器中,在Site ->IIS——比;ASP——比;调试属性

如果你看到这个…

ie friendly errors 1

或者这个……

ie friendly errors 2

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

如果你看到这个…

Custom errors enabled .

...然后自定义错误是工作的,但你没有一个自定义错误页面(当然,在这一点上,我们谈论的是。net而不是经典的asp)。你需要改变你的网页中的customErrors标签。配置为“RemoteOnly”以在服务器上查看,或“Off”以远程查看。

如果你看到一些与你的网站样式相似的东西,那么自定义错误可能是On或RemoteOnly,并且它正在显示自定义页面(Views->Shared->Error)。例如MVC中的cshtml)。也就是说,有人在IIS中更改了httpErrors的页面,这是不太可能的,但也有可能,所以请参阅第一部分。

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

在我的情况下,这是许可问题。 打开应用程序文件夹属性->安全标签->编辑→添加< / p >
  • IIS appppool \[DefaultAppPool或任何其他appppool](如果使用ApplicationPoolIdentity选项)
  • IUSRS
  • IIS_IUSRS

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

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

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

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

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

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