Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reporting services 带反向代理的主数据服务_Reporting Services_Reverse Proxy_Url Rewrite Module_Iis 10_Master Data Services - Fatal编程技术网

Reporting services 带反向代理的主数据服务

Reporting services 带反向代理的主数据服务,reporting-services,reverse-proxy,url-rewrite-module,iis-10,master-data-services,Reporting Services,Reverse Proxy,Url Rewrite Module,Iis 10,Master Data Services,我在通过反向代理访问MDS时遇到问题。 下面是我的infra设置的简化网络图。 所以,基本上我有两个分别用于SSR和mds的应用服务器和一个web服务器。 此外,还有一个负载平衡器,用于向web服务器提供请求。 我到处都在使用基本身份验证 我在web服务器上设置了反向代理,根据/mds或/reports将url重写为mds或ssrs服务器 入站规则- <rules> <rule name="SSRS Reverse Proxy" stopPro

我在通过反向代理访问MDS时遇到问题。 下面是我的infra设置的简化网络图。

所以,基本上我有两个分别用于SSR和mds的应用服务器和一个web服务器。 此外,还有一个负载平衡器,用于向web服务器提供请求。 我到处都在使用
基本身份验证

我在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不行。感谢你的指点

谢谢

更新(20191008)

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

更新(20191009)

我想我已经指出了这个问题。我比较了直接调用appserver和通过反向代理调用appserver时的请求头。我意识到当通过代理调用时,“Authorization”头丢失了。代理似乎删除了授权标头

这是正常的行为吗?通过代理调用时,如何强制执行授权标头


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

您确实应该用
{HTTP\u HOST}
替换出站重写规则中的
WebServer\u IP
(我假设这是IIS的正确表示法,它应该解析为客户端请求的主机)。这应该避免CORS机制的介入(以及访问服务所需的SSL证书、NATting、本地主机或dns条目可能出现的问题)

此外,如果CORS已就位,则需要一些特殊的CORS配置,以允许浏览器发送凭据


此外,您可以从控制台发布更多详细的错误消息(
与“Access Control Allow Origin”相关的
非常模糊)

您在控制台面板中看到了什么错误消息?此外,401错误的子状态代码是什么?嗨,谢谢你指出。我已经更新了我的问题。很抱歉忘记提及-子状态代码是401.2Hi。您是否在10.93.xx.xx上为这些静态文件启用了windows身份验证。?此外,您是否在服务器10.93.xx.xx而不是前端服务器上设置了CORS头?我使用的是基本身份验证。此外,应用服务器上还设置了CORS标头。