过去几天,我试图找到以下错误消息的答案,该消息困扰我在Azure Web App托管上的.NET Core 2.0应用程序:
当CGI应用程序未返回有效集时,会发生此错误 HTTP标头,或代理或网关无法发送时 请求父网关。您可能需要获取网络跟踪或 如果不是CGI问题,请联系代理服务器管理员。
因为需要几天才能找到答案,所以我在这里发布我的解决方案。
在CGI错误旁边,我还在错误日志中找到以下错误代码:0x80072ee2。这表示请求已超时。但是,Azure的超时限制为4分钟,大约1.5分钟后出现错误。该应用程序旨在在4分钟内处理请求,因此不应发生超时错误。
答案 0 :(得分:1)
我在阅读以下页面后找到了解决方案:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/?tabs=aspnetcore2x。在这个页面中IIS之间的关系 并解释了Kestrel引擎。虽然Web应用程序托管应该与IIS托管不同,但我怀疑Azure使用了很多IIS模块,因为有许多相似之处。
关于github的以下问题也是解决我的问题的一部分:https://github.com/aspnet/IISIntegration/issues/311。在本期中,我们解释说,在IIS旁边,Kestrel的超时限制也是2分钟。我最初在搜索解决方案时完全错过了那些信息。更改Kestrel服务器的超时(可在以下页面中找到:https://docs.microsoft.com/en-us/aspnet/core/hosting/aspnet-core-module)解决了我的问题并让请求在2.5分钟内运行。
我之后使用Chrome开发人员工具检查了超时显示之前的确切持续时间,它似乎正好是2分钟,这应该是我的问题是Kestrel服务器超时的更早期线索。