通过 HTTPS 访问的网站在公共负载均衡器后面的 Azure VM 上出现 502 错误

通过 HTTPS 访问的网站在公共负载均衡器后面的 Azure VM 上出现 502 错误

我在 Azure 公共负载均衡器后面有一个 Azure VM。该 VM 正在运行一个网站。我可以通过 HTTP 在浏览器中加载该网站,没有任何问题,但当我尝试 HTTPS 时,我收到 502 错误。

我设置了一条负载平衡规则,将 443 发送到虚拟机。我允许通过网络安全组在 443 上进行所有连接。我已三次检查配置并查看了几个小时,但没有任何进展。

另一个线索是,如果我远程访问虚拟机,将 DNS 名称设置为指向虚拟机的内部 IP(10.1.2.4,而不是指向负载平衡器的公共 IP),然后通过 HTTPS 在浏览器中加载网站,它就可以正常工作。除了我的 IIS 配置似乎不是问题之外,我不确定这意味着什么。

任何想法都将不胜感激,我很乐意提供更多详细信息。谢谢!

编辑 1
在我的 Azure 负载均衡器中,当我删除 HTTPS 负载均衡规则并添加一条 NAT 规则将 443 流量直接重定向到我的一个虚拟机时,HTTPS 就可以正常工作了。因此,这似乎是我使用带有负载均衡规则的 HTTPS 的配置所特有的。

答案1

我终于弄清楚了这个问题,希望这能为其他人节省几个小时。问题原来是我的负载平衡器探测设置和我网站的 IIS 绑定的结合。

在虚拟机上的 IIS 中,我配置了 2 个网站。由于 2 个网站共享 1 个公共 IP,因此我在 IIS 中设置绑定时使用主机名。因此,基本上我的绑定配置为将 www.site.com 流量发送到站点 #1,将 test.site.com 流量发送到站点 #2。我没有设置默认绑定来处理除这两个之外的 DNS 名称的端口 80 流量。因此,如果您转到http://[内部 IP 地址或计算机名称]没有页面被加载,因为没有绑定来处理它。

我的探测器是一个 HTTP 探测器,设置为在端口 80 上命中 /probe.html。问题是探测器可能会命中http://[内部 IP 或机器名称]/probe.html因为探测器对我使用的 DNS 名称一无所知,并且该 URL 没有绑定来在 IIS 中处理它。因此探测器失败并假设我的所有虚拟机都处于脱机状态。这导致了 502 错误。

还不确定我会做什么修复。我要么在 IIS 中添加指向生产网站的端口 80 的默认绑定,要么使用 TCP 探测。

真正让我感到困惑的是,正如我上面提到的,HTTP 工作正常。我在测试 HTTP 时一定碰巧有一个默认的 IIS 绑定,然后在测试 HTTPS 之前将其删除。现在没有有效的探测,HTTP 和 HTTPS 都会失败。有了有效的探测,两者就可以正常工作。

相关内容