0

我在 Windows Server/IIS 和 Azure 应用程序网关上托管多个 .NET 网站时遇到问题。

我们在运行 IIS 的单个 Azure Windows VM 上托管多个站点,位于 Azure 应用程序网关 WAFv2 后面。VM 使用配置为指向 VM 的专用 IP 的后端池连接到 App Gateway,并在 App Gateway 和 VM VNet 之间配置了 VNet 对等互连。

当我停止 IIS 中的默认网站时,所有网站都会从 Azure 应用程序网关返回“502 Bad Gateway”错误,并且 VM 所在的后端池的后端运行状况状态更改为“不正常”。

谁能告诉我为什么停止默认站点会导致所有站点的应用程序网关出错?

编辑: 按要求提供 IIS 绑定的屏幕截图

编辑 2:显然我无法回答我自己的问题,但是在与我们的 CSP 一起解决这个问题后,我有了答案。默认情况下,App Gateway 后端运行状况检查会查看默认 IIS 站点。如果您停止该操作,则后端运行状况检查将失败并进入不健康状态。此时,APP 网关将不再尝试路由任何请求,无论 URL 到该后端池。

4

3 回答 3

0

如果应用程序网关没有在后端地址池中配置 VM 或虚拟机规模集,则它无法路由任何客户请求并发送错误的网关错误。按照以下命令显示后端地址池 JSON 结果。

Get-AzApplicationGateway -Name "SampleGateway" -ResourceGroupName "ExampleResourceGroup"

这是解决 502 错误的官方指南。
https://docs.microsoft.com/en-us/azure/application-gateway/application-gateway-troubleshooting-502#overview
另外,这是一个简单的疑难解答。
https://support.microsoft.com/en-us/help/4504111/azure-application-gateway-with-bad-gateway-502-errors

于 2020-07-10T03:28:24.693 回答
0

如果我要尝试解决这个问题,我可能会从一个全新的“测试”IIS 实例开始,并在端口 80 上设置一个反向代理,其唯一的工作是监听到端口 80 的传入请求。然后这些请求将是由您的反向代理转发到绑定到不同端口(例如 81、82、83 等)的实际网站。

这里的想法是让您的所有网站在不同的端口上运行,这样当您停止其中一个站点时,其他站点继续运行而不会出现问题。

鉴于您在单个 IIS 实例中托管了多达 40 个站点的设置,我只会尝试使用全新的“测试”IIS 实例进行此类故障排除。

  1. 创建一个全新的 IIS“测试”实例。
  2. 创建反向代理。为此,创建一个新站点并将其命名(例如 rev-proxy)并为其绑定端口 80。
  3. 部署一个实际站点(例如 myfirstsite)。给它一个非 80 的端口绑定(例如 81)。
  4. 双击您的 rev-proxy 站点并添加 URL 重写 -> 入站规则 -> 空白规则。见附图。添加一条规则,以便当用户请求“myfirstsite”时,该请求被转发到端口 81。使用“测试模式”按钮测试您的模式。该图像只是一个建议,您的模式应该与您的用户用来请求您的站点的 URL 相对应,而不一定与您在 IIS 中为您的站点提供的名称相对应。

具有 URL 重写的反向代理示例

于 2020-07-23T15:17:08.187 回答
0

经过几个月的混乱,找到了这个问题的答案!

使用 Azure 应用程序网关,每个后端池 ping 的默认运行状况探测并在后端池本身中的已配置 IP 地址或 FQDN 上查找响应。

在我的情况下,这设置为虚拟机的本地 IP 地址(当我在 18-24 个月前配置此地址时,我记得我们的 Azure CSP 告诉我在后端池配置中使用 FQDN 存在错误)。

这意味着,当 Health Probe 尝试与 VM 通信时,IIS 中的默认网站是唯一配置为响应此 IP 地址上的任何请求的东西。

如果您停止默认站点,则 Health Probe 不会对其请求做出响应,并且后端池状态会如您预期的那样变为 Unhealthy。

这里真正有趣的是,一旦后端池运行状况探测状态变为不健康,Azure 应用程序网关甚至停止尝试将任何流量路由到受影响的后端池。相反,它会立即报告502 Bad gateway错误,并将继续这样做,直到 Health Probe 状态得到纠正并恢复健康!

于 2021-07-04T22:08:36.563 回答