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>
【讨论】:
实际上,<system.webserver>
设置对我来说已经足够了,谢谢。
即使在运行经典 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 "<%@ LANGUAGE=javascript %>" > test.asp
echo "<%Response.Write("test");%>" >> test.asp
然后 test.asp 将被编码为 Unicode,请求它会产生一个没有任何细节的 500。
做一个notepad test.asp
,然后点击“另存为...”并选择“ANSI”编码来修复它。
【讨论】:
以上是关于500错误信息详解,ASP+IIS 7.5的主要内容,如果未能解决你的问题,请参考以下文章