gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:57:06 30 4
gpt4 key购买 nike

我在通过反向代理访问 MDS 时遇到问题。
下面是我的基础设施设置的简化网络图。
enter image description here

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

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

入站规则 -

<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/的调用是未经授权的。

enter image description here

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

谢谢。

更新 (20191008) -

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

enter image description here

更新 (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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com