在尝试将请求代理到外部网站时,我们遇到了 ARR 配置问题。我们的服务器配置如下:
- 我们控制的带有 IIS 7.5 的 Web 服务器。它运行几个网站,全部通过 HTTP年代仅有的
- 我们客户的网站,我们无法控制,也无法更改其配置。为了便于讨论,他们的域名是 https://www.parashka.com
我们需要我们的服务器接受对我们控制的特定子域的请求,即https://gateway.muciacio.net并将其转发到客户的网站https://www.parashka.com. 也可以通过 HTTP 访问年代仅有的。
为此,我在 IIS 中创建了新的网站节点,gateway.muciacio.net
通过 HTTPS 将其绑定,并调整 ARR/URL 重写规则如下:
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="ReverseProxyInboundRule1" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="https://www.parashka.com/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
现在我得到了 HTTP502.3网关错误。失败请求跟踪也显示它是由代码错误引起的2147954575(0x80072F8F),我相信错误_WINHTTP_SECURE_FAILURE。
有趣的是,如果我配置 ARR 将请求转发到我们自己的服务器上的站点,例如action
用这个替换条目:
<action type="Rewrite" url="https://customerX.muciacio.net/{R:1}" />
然后错误就消失并且一切按预期进行。
另一方面,如果我将 ARR 重新定位到某个知名网站,比如 stackoverflow:
<action type="Rewrite" url="https://stackoverflow.com/{R:1}" />
然后同样的错误2147954575再次出现,这让我认为客户的网站不应该受到指责,这是我们这边的问题。
我在互联网上发现一些模糊的评论,指出需要在两个 Web 服务器上使用相同的 SSL 证书。然而,这在我们的环境中毫无意义,因为服务器位于不同的域中,由不同的组织控制。
另请注意,我们的服务器是 Windows Server 2008 R2(近期无法升级,无法做太多事情)