我在 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 都会失败。有了有效的探测,两者就可以正常工作。