我有一组 IIS 服务器,位于供应商的负载平衡器后面。供应商的负载平衡器通过访问服务器上的特殊监控页面来确定服务器是否正常运行,它为此使用的 URL 是服务器的本地 IP + 监控页面的路径。它会查看此网页的 HTTP 和 HTTPS 版本,除非 HTTP 版本已启动,否则不会将流量定向到端口 80,除非页面的 HTTPS 版本已启动,否则不会将流量定向到 443。
以前这样做是没问题的,因为我们可以在 IIS 中创建一个空白绑定,网页会响应以 IP 作为 URL 发出的请求。显然,当负载均衡器访问 SSL 版本的监控页面时会出现证书错误,但这没问题,因为负载均衡器只是在监控页面上寻找 PASS/FAIL,它并不关心 SSL 错误。
但是,现在我们需要在这些 IIS 服务器上托管多个域,并且使用完全不同的 SSL 证书。这对我们来说是个问题,因为如果您有任何 HTTPS 绑定未选中“需要服务器名称指示”,则 IIS 将愚蠢地使用该绑定对服务器发出的每个 SSL 请求使用的任何证书,即使它们明确指定了不同的证书。显然,IIS 不会让您在空白绑定上选中“需要服务器名称指示”,如果您尝试在 applicationhost.config 中的绑定上手动设置该标志,则绑定根本不起作用。
因此,我想要做的是添加一个绑定,将 IP 地址作为主机名。IIS 不允许您在 GUI 中执行此操作,但同样,您可以在 applicationhost.config 中手动执行此操作。这对于 HTTP 绑定来说非常有效。问题是,当您尝试对 HTTPS 绑定执行此操作时,最终会得到一个没有“需要服务器名称指示”的绑定,这意味着绑定使用的任何证书都会用于对服务器发出的每个 SSL 请求,我又回到了原点。尝试在 applicationhost.config 中手动添加该 RSNI 标志会导致绑定不起作用,就像您在空白绑定上尝试该技巧一样。
我有点不知所措。显然,正确的解决方案是让负载平衡器使用正确的 URL,但出于某种原因,这对我们的供应商来说似乎是一项非常繁重的工作,所以我正在寻找替代解决方案。