我刚刚将更新部署到现有的 ASP.NET MVC3 网站(已配置),但出现了 IIS 蓝屏死机提示
HTTP 错误 500.0 - 内部服务器错误
由于发生了内部服务器错误,因此无法显示页面。
然而,应用程序事件日志中没有显示任何内容,而我期望看到该条目的(更)详细描述。
我该如何诊断这个问题?
答案1
看一下IIS7的失败请求跟踪功能:
我要做的另一件事是调整您的<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
值设置为。PassThrough
httpErrors