我在通过反向代理访问 MDS 时遇到问题。
下面是我的基础设施设置的简化网络图。
reporting-services - 具有反向代理的主数据服务-LMLPHP

所以,基本上我有 2 个分别用于 ssrs 和 mds 的应用程序服务器和一个 Web 服务器。
此外,还有一个负载均衡器可以为 Web 服务器提供请求。
我到处都在使用 Basic Authentication

我在 web 服务器上设置了反向代理,它根据 /mds/reports 将 url 重写为 mds 或 ssrs 服务器。

入站规则 -

<rules>
                <rule name="SSRS Reverse Proxy" stopProcessing="true">
                    <match url="^reports/(.*)" />
                    <action type="Rewrite" url="http://App1_IP/{R:0}" logRewrittenUrl="false" />
                    <serverVariables>
                        <set name="HTTP_X_ORIGINAL_ACCEPT_ENCODING" value="{HTTP_ACCEPT_ENCODING}" />
                        <set name="HTTP_ACCEPT_ENCODING" value="" />
                    </serverVariables>
                </rule>
                <rule name="SSRS Report Server Reverse Proxy" stopProcessing="true">
                    <match url="^reportserver/(.*)" />
                    <action type="Rewrite" url="http://App1_IP/{R:0}" logRewrittenUrl="false" />
                    <serverVariables>
                        <set name="HTTP_X_ORIGINAL_ACCEPT_ENCODING" value="{HTTP_ACCEPT_ENCODING}" />
                        <set name="HTTP_ACCEPT_ENCODING" value="" />
                    </serverVariables>
                </rule>
                <rule name="MDS Reverse Proxy" stopProcessing="true">
                    <match url="^mds/(.*)" />
                    <action type="Rewrite" url="http://App2_IP/{R:0}" logRewrittenUrl="false" />
                    <serverVariables>
                        <set name="HTTP_X_ORIGINAL_ACCEPT_ENCODING" value="{HTTP_ACCEPT_ENCODING}" />
                        <set name="HTTP_ACCEPT_ENCODING" value="" />
                    </serverVariables>
                </rule>
            </rules>

出站规则 -
<outboundRules>
                <rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1">
                    <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^http(s)?://App1_IP/(.*)" />
                    <action type="Rewrite" value="http{R:1}://WebServer_IP/{R:2}" />
                </rule>
                <rule name="ReverseProxyOutboundRule2" preCondition="ResponseIsHtml1">
                    <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^http(s)?://App2_IP/(.*)" />
                    <action type="Rewrite" value="http{R:1}://WebServer_IP/{R:2}" />
                </rule>
                <rule name="ResponseAcceptEncoding" preCondition="NeedRestoringAcceptEncoding">
                    <match serverVariable="HTTP_ACCEPT_ENCODING" pattern="^(.*)" />
                    <action type="Rewrite" value="{HTTP_X_ORIGINAL_ACCEPT_ENCODING}" />
                </rule>
                <preConditions>
                    <preCondition name="ResponseIsHtml1">
                        <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                    </preCondition>
                    <preCondition name="NeedRestoringAcceptEncoding">
                        <add input="{HTTP_X_ORIGINAL_ACCEPT_ENCODING}" pattern=".*|" />
                    </preCondition>
                </preConditions>
            </outboundRules>

SSRS 规则运行良好。但是当用户访问MDS时,页面无法正常显示,并不断提示输入用户名和密码。当我查看网络流量时,似乎对一些 javascript 文件和/MDS/api/的调用是未经授权的。

reporting-services - 具有反向代理的主数据服务-LMLPHP

我不确定出了什么问题,为什么 ssrs 可以,但 mds 不行。感谢任何指针。

谢谢。

更新 (20191008) -

控制台面板显示与“Access-Control-Allow-Origin”相关的错误,所以我在 MDS 网站中添加了自定义标题。但问题仍然存在。

reporting-services - 具有反向代理的主数据服务-LMLPHP

更新 (20191009) -

我想我已经指出了这个问题。我在直接调用应用服务器然后通过反向代理时比较了请求 header 。我意识到通过代理调用时,缺少“授权” header 。似乎代理删除了授权 header 。

这是正常的行为吗?通过代理调用时如何强制使用授权 header ?

为什么它与 SSRS 一起工作而不是与 MDS 一起工作?

最佳答案

你真的应该用 WebServer_IP 替换你的出站重写规则中的 {HTTP_HOST} (我认为这是 IIS 的正确表示法,它应该解析为客户端请求的主机)。这应该避免 CORS 机制启动(以及访问服务所需的 SSL 证书、NATting、本地主机或 dns 条目可能存在问题)。

此外,如果 CORS 到位,您将需要一些特殊的 CORS 配置以允许浏览器发送凭据。

此外,您可以从控制台发布更详细的错误消息(related to "Access-Control-Allow-Origin" 非常模糊)。

关于reporting-services - 具有反向代理的主数据服务,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58217137/

10-12 13:09