![为什么仅当启用 SSL 时才会收到 ARR 的 502 错误?](https://linux22.com/image/670329/%E4%B8%BA%E4%BB%80%E4%B9%88%E4%BB%85%E5%BD%93%E5%90%AF%E7%94%A8%20SSL%20%E6%97%B6%E6%89%8D%E4%BC%9A%E6%94%B6%E5%88%B0%20ARR%20%E7%9A%84%20502%20%E9%94%99%E8%AF%AF%EF%BC%9F.png)
我在前端服务器上配置了 ARR,并在其后面配置了 IIS (8) Web 场。在 ARR 服务器和 IIS Web 场服务器上启用了使用相同证书的 SSL,并且我没有使用 SSL 卸载。这些服务器使用共享配置,因此设置理论上是相同的。有趣的是,当 ARR 循环配置命中其中一个服务器时,它会返回“502 - Web 服务器在充当网关或代理服务器时收到无效响应。”错误。另一台服务器返回页面正常,SSL 工作正常。如果我直接将浏览器指向“坏”服务器,不使用 ARR,它在 HTTPS/SSL 模式下可以正常工作。我检查了配置,发现服务器之间没有任何不同,甚至在 ARR 服务器上启用了失败请求跟踪,这没什么用,但我在日志中看到了不同的 502.3 错误。为什么我会收到任何类型的 502 错误,尤其是在场中的一台服务器上,而它们使用共享配置配置相同,并且证书在所有服务器上?
答案1
即使 IIS 在所有节点上都设置为共享配置,每个节点的操作系统也能够在 IIS 之外设置 SSL 绑定,这些绑定不会在节点之间共享。因此,我认为问题在于一个节点上的操作系统端(而不是 IIS)的 SSL 绑定,因此不允许 IIS 要求它执行的匹配。要解决该问题,请查看操作系统 SSL 绑定并将其与其他服务器节点进行比较,纠正其中的任何差异,以便所有节点都匹配,这将为您解决此问题。
我遇到过类似的问题,我的一个同事在绑定证书时忘记勾选使用 SNI,这导致它推送到操作系统并在那里绑定。随后将其更改为使用 SNI 并没有删除操作系统 SSL 绑定,经过一番检查后我们注意到了这一点并将其删除,一切又恢复正常了。
答案2
让我回答我自己的问题。
我禁用了“需要指示服务器名称”突然间一切都恢复正常了。这很奇怪,因为同一站点的所有服务器都启用了 SNI,但对于其中一台服务器,取消选中它后一切正常。
我的理论是:即使使用共享配置,SSL 绑定信息实际上也不会从一台服务器传输到另一台服务器,从 IP 传输到证书。正如你们许多人所知,您仍然必须手动转到另一台服务器并选择证书。
所以这是关于设置如何不同的线索。我实际上相信这些设置在视觉上是相同的,但某种程度上,对于一个绑定来说,某些东西却有所不同。
无论如何,我在这个问题上花了几个小时,却没有看到任何关于“需要服务器名称指示”与 502 错误相关的信息。所以我想与互联网社区分享,以便未来的人们在使用 SSL 时遇到 502 错误时知道查看该设置。
也许有一种方法可以保持它处于启用状态,因为它在我的农场的其他地方都有效,但至少你会知道你需要在哪个区域寻找解决 502 错误的方法。
当然,请记住,502错误的第一个原因在我看来,当不使用 SSL 卸载时,没有在所有服务器上安装证书,但这不是我的问题,我的问题很独特,因为服务器场中只有一台服务器在启用 SSL 的情况下行为不当。
我希望这对其他人有帮助。
答案3
我遇到了类似的错误。直接重写 Url 没问题,但是 ARR 会出现 502 安全错误。我使用自签名证书进行开发工作,结果发现我创建证书的方式有所不同。当我使用 Powershell 时:
New-SelfSignedCertificate -DnsName *.localmachine.com -CertStoreLocation cert:\LocalMachine\My
该证书可以直接使用该证书访问多个网站,但是,通过 ARR 会抛出错误。如果我使用老式的 makecert:
makecert -n "CN=*.localmachine.com" -pe -ss My -sr LocalMachine -sky exchange -m 120 -in "WebTeam Dev WildCard Root CA" -is Root -ir LocalMachine -a sha256 -eku 1.3.6.1.5.5.7.3.1
无论是直接运行还是通过 ARR 运行,它都可以正常工作 - 甚至跟踪日志也没有提供有关实际问题的任何详细信息 :(