502 bad gateway error response 不像传统的 500 错误,主要是代码问题,这使得解决根本原因变得更加困难
基本上,HTTP 502 Bad Gateway 服务器错误响应代码表明 Web 服务器(在我们的场景中为 IIS)在充当网关或代理时,从上游服务器接收到无效响应。这可能由于多种原因而发生 - 例如,无法连接到上游服务器,上游服务器没有响应,或者上游服务器响应时间过长(超时)。结果,充当网关或代理的服务器将报告为 502 状态。 502 难以排除故障的原因是根本原因可能有很大差异,并且取决于实际的应用程序框架,例如如 Asp.Net、PHP、Java 等。
对于 ASP.NET Core 应用程序,我们知道,为了在 IIS 中托管应用程序,我们需要安装 AspNetCoreModule。它实际上是 IIS 中的本机模块,充当 dotnet Core 应用程序的反向代理,这就是为什么我们可能会遇到 ASP.NET Core 应用程序的 502 错误。
虽然 502 错误也可能是由底层平台问题引起的,例如磁盘/存储问题,但在大多数情况下,我们需要关注上游服务器中运行的组件(根本原因),IIS 日志会为我们提供有关如何缩小范围的信息下来的问题。
现在,假设我们在访问 ASP.Net Core 应用程序时遇到 502 错误,子状态代码可能没有足够的帮助。首先,我们可以检查 IIS 日志并通过 sc-win32-status 代码验证根本原因。或者,我们可以启用失败请求跟踪以了解更多详细信息。
上面的日志给了我们两个导入信息,错误来自 AspNetCoreModule,错误代码是 2147954402。也就是说,502 错误是由 AspNetCoreModule 触发的,它可能遇到了一些无效的响应。此外,我们可以使用 err 实用程序或访问http://errors/来确定 2147954402 只是 WININET_E_TIMEOUT。默认情况下,ASP.NET Core 请求超时为 2 分钟,我们可以通过设置文件中的 requestTimeout 来更改它。更多 ASP.NET Core 配置请参考 ASP.NET Core Module 配置参考。
另外,我会要求您阅读 asp.net core 2.2 应用程序的故障排除指南。
https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/azure-apps/troubleshoot?view=aspnetcore-2.2
希望能帮助到你。