Reporting services 带反向代理的主数据服务
我在通过反向代理访问MDS时遇到问题。 下面是我的infra设置的简化网络图。 所以,基本上我有两个分别用于SSR和mds的应用服务器和一个web服务器。 此外,还有一个负载平衡器,用于向web服务器提供请求。 我到处都在使用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
基本身份验证
我在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标头。