当事件日志中没有写入任何内容时,如何诊断 IIS 7.5 上的 500 内部服务器错误?

当事件日志中没有写入任何内容时,如何诊断 IIS 7.5 上的 500 内部服务器错误?

我刚刚将更新部署到现有的 ASP.NET MVC3 网站(已配置),但出现了 IIS 蓝屏死机提示

HTTP 错误 500.0 - 内部服务器错误
由于发生了内部服务器错误,因此无法显示页面。

然而,应用程序事件日志中没有显示任何内容,而我期望看到该条目的(更)详细描述。

我该如何诊断这个问题?

答案1

看一下IIS7的失败请求跟踪功能:

使用 IIS 7 中的跟踪功能解决失败的请求
使用失败请求跟踪进行故障排除

我要做的另一件事是调整您的<httpErrors>设置,因为 IIS 可能会吞下来自管道上游的错误消息:

<configuration>
  <system.webServer>
    <httpErrors existingResponse="PassThrough" />
  </system.webServer>
</configuration>

如果网站是用传统 ASP 编写的,那么一定要打开发送错误到浏览器ASP 配置功能中的设置:

在此处输入图片描述

最后,如果你正在使用 Internet Explorer,请确保已关闭显示友好的 HTTP 错误消息在高级设置中(尽管我怀疑您已经这样做了,或者正在使用其他浏览器)。

答案2

就我而言:

  • 事件日志是空的。
  • web.config没有损坏 - 通过在本地机器上使用相同的方法进行验证/使用inetmgr

最后...

  • 检查 IIS 日志显示了类似这样的请求

...Chrome/57.0.2987.133+Safari/537.36 500 19 5 312

关键在于:

sc-status sc-substatus sc-win32-status 500 19 5

经过谷歌搜索,我发现IIS_USRS没有读取www文件夹的权限

答案3

最明显的问题是 Web 应用程序文件夹上的 NTFS 权限不正确或为零。因此,请确保为网站提供服务的帐户具有正确的权限。如果没有对 Web 目录的正确 NTFS 权限,则您在 web.config 中输入的内容无关紧要,因为它永远不会被读取。

快速检查可以给予每个人完全的权利 - 如果网站开始工作,那么您就知道这是一个权利问题,然后您可以着手将适当的权利分配给更合适的帐户。

答案4

我在使用 Azure Web App 时也遇到了同样的问题。在本地调试时,ajax 调用返回的错误消息(JSON)会完全返回到浏览器。但是一旦部署到 Web App,这些消息就会被吞没,并返回默认的 500 错误消息。因此,我必须在 web.config 标记中明确将existingResponse值设置为。PassThroughhttpErrors

相关内容