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

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

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


当前回答

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

其他回答

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

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

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

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

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

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

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

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

...通常是这样的:

**那么你就知道你在IIS **中看到了当前配置的错误页面,你不需要更改ASP.net customErrors设置,asp error detail设置,或“显示友好的http错误”浏览器设置。

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

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

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

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

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

这就留下了几种可能性。

The browser you are using on the server is configured to use a proxy in its connection settings so it is not being seen as "local". You're not actually browsing to the site you think you are browsing to - this commonly happens when there's a load balancer involved. Do a ping check to see if dns gives you an IP on the server or somewhere else. Your site's httpErrors settings is set for "Custom" only. Change it to "DetailedLocalOnly". However, if you have a configuration error, this may not work since the site level httpErrors is also a configuration item. In that case proceed to #4 The default for httpErrors for all sites is set for "Custom". In this case you need to click on the top level server node in IIS Manager (and not a particular site) and change the httpErrors settings there to DetailedLocalOnly. If this is an internal server and you're not worried about divulging sensitive information, you could also set it to "Detailed" which will allow you to see the error from clients other than the server. You're missing a module on the server like UrlRewrite (this one bites me a lot, and it often gives the generic message regardless of the httpErrors settings).

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

将站点的httpErrors更改为“Detailed”,这样就可以远程查看它。但如果它不起作用,您的错误可能已经是配置错误,请参阅上面的#3。因此,您可能会受困于#4或#5,您将需要来自服务器团队的人员。

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

如果你看到这个…

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

...那么你需要在IIS管理器中,在站点——> IIS——> ASP——>调试属性下,将“发送错误到浏览器”更改为true

如果你看到这个…

或者这个……

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

如果你看到这个…

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

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

找到了。

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

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

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

echo“<%@ LANGUAGE=Javascript %>”>测试

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

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

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

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