RD Web Access IIS 前面的 Apache 反向代理

RD Web Access IIS 前面的 Apache 反向代理

我刚刚在内部 Windows Server 2012 R2 服务器上配置了 Microsoft 远程桌面服务。我可以通过端口转发从网络外部访问 RDP。但是,由于我在端口 80/443 上运行了其他 Web 服务器,因此我无法将 IIS 上运行的 RD Web 访问直接公开到互联网。

我为所有内部站点都配置了 Apache 反向代理,因此我尝试将其用于 RD Web 访问。我的配置(针对 HTTP 和 HTTPS)如下

<VirtualHost *:80>
    ServerName foo.example.com

    ProxyPass / http://192.168.1.xxx/
    ProxyPassReverse / http://192.168.1.xxx/
</VirtualHost>

此配置似乎有效,但存在问题。当直接连接到 时foo.example.com,我得到了默认的 IIS 页面,正如预期的那样。但是,当访问 时http://foo.example.com/RDWeb/,URL 会更改为http://192.168.1.xxx/RDWeb,显然我无法从我的网络外部访问它。我需要它保持为http://foo.example.com/RDWeb/

我尝试添加ProxyPreserveHost On到我的 Apache 配置中,当我这样做时,我得到了一个无限的重定向循环,所以这也不起作用。我很确定这是不是IIS 问题,因为如果我将本地主机文件设置为指向foo.example.com192.168.1.xxx它就可以正常工作。

我的 Apache 反向代理配置中是否缺少了什么?

答案1

好吧,经过顿悟之后,我找到了问题的根源。

事实证明,我确实应该继续ProxyPreserveHost On允许 URL 重写到正确的外部 URL。但是,由于我的外部 URL 有 SSL 证书,因此我得到了无限重定向循环,如下所示

External URL (https) -> Internal (http) -> Internal (https) -> External (https)

我通过将ProxyPassProxyPassReverse指令转换为代理 HTTPS 而不是 HTTP 内部 IP 来修复此问题。因此,我还必须添加指令SSLProxyEngine On

相关内容