ASP.NET Core RC2 IIS 在选项请求上返回 502

Posted

技术标签:

【中文标题】ASP.NET Core RC2 IIS 在选项请求上返回 502【英文标题】:ASP.NET Core RC2 IIS returning 502 on options request 【发布时间】:2016-10-01 22:51:30 【问题描述】:

我们有一个最近升级到 RC2 的 ASP.NET Core 应用程序。升级前一切正常,升级后一切都在 Dev 和 Staging 环境中正常工作,但在生产环境中,应用程序对 MVC 端点未处理的每个请求都以 502 响应:

502 - Web 服务器在充当网关或代理服务器时收到无效响应。 您要查找的页面有问题,无法显示。当 Web 服务器(作为网关或代理)联系上游内容服务器时,它收到了来自内容服务器的无效响应。

这意味着例如 https://www.myapp.com/somenonexistingroute 返回 502 而不是 404,而对现有端点的调用工作正常。

问题是我们在跨源上下文中使用应用程序,因此我们需要选项请求(预检 cors 请求)才能工作,并且它们也以 502 响应。

所有环境都运行装有 IIS 8.5 和 ASP.NET Core 平台处理程序的 Windows Server 2012。

发生了什么事?

更新

经过更多调试,我们发现这可能是由框架中的错误引起的。我们创建了一个GitHub issue

【问题讨论】:

快速提问;您在ConfigureServices 中添加了Microsoft.AspNet.Corsservices.AddCors(); 是的,这在其他环境中运行良好。通过 IIS 添加这些标头也会使选项请求返回 502,导致浏览器无法处理实际请求。 那么,日志说什么 - 你有子代码 502.x 吗?生产环境有什么不同,有没有负载均衡HW/SW?你运行 ARR 吗?它是否部署在 Azure VM 上? 无子代码。它没有部署在 Azure 中,而是部署在来自托管暂存和测试环境的同一提供商的 VM 上(尽管它们并不相同)。我不确定负载平衡,我认为 IIS 前面有一个负载平衡器,但响应显然来自 IIS,所以我不确定这是否是问题所在。我知道的一件事是生产环境没有互联网访问权限,因此 ASP.NET Core 模块安装程序的工作方式有点不同。 我不确定我们是否有 ARR。 【参考方案1】:

我知道现在提供帮助为时已晚,但也许它可以帮助其他面临此类问题的人。

预检请求也出现 502 错误(选项请求,角度 5 网站 -> asp.net core 2.0 web api,iis 7.5)。

我发现我定义了两次 ASPNETCORE_ENVIRONMENT 环境变量(具有相同的值);一次在我的 asp.net core web api 的 web.config 文件中,一次在 IIS 的配置编辑器中(system.webServer/aspNetCore -> ApplicationHost.config <...> -> enviromentVariables)。一旦我删除了其中一个(IIS 一个,但无论哪个可行),我的预检请求都会再次生效!

【讨论】:

您可以在此处粘贴您的网络配置值以供参考吗? 它是这样的: 但是我删除了它,并把它,如上所述,在 IIS 的配置编辑器中。因此,当我将它部署到我的测试环境的 IIS 或我的产品环境之一时,它将分别具有“生产”或“测试”作为值。 我的意思是:因此,当我将它部署到我的测试环境的 IIS 或我的产品环境之一时,它将分别具有“测试”或“生产”作为值。跨度>

以上是关于ASP.NET Core RC2 IIS 在选项请求上返回 502的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core RC2 中的依赖注入失败

在 asp.net core rc2 中指定代理

ASP.NET Core RC2 Jwt 令牌 KID 错误

如何在 ASP.NET core rc2 中禁用浏览器缓存?

在 ASP.NET Core RC2 中使用 AddAuthentication 时的不明确调用

Razor 页面在 ASP.NET Core RC2 运行时看不到引用的类库