Сервисы основных данных с обратным прокси - PullRequest
3 голосов
/ 03 октября 2019

У меня проблема с доступом к MDS через обратный прокси. Ниже приведена упрощенная схема сети моей инфраструктуры. enter image description here

Итак, в основном у меня есть 2 сервера приложений для ssrs и mds соответственно и один веб-сервер. Плюс есть балансировщик нагрузки, который обслуживает запросы к веб-серверу. Я использую Basic Authentication везде.

У меня есть обратная настройка прокси на веб-сервере, который переписывает URL-адрес на сервер mds или ssrs на основе /mds или /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) -

Я думаю, что я должен указать точкувопрос. Я сравнил заголовки запросов при непосредственном вызове сервера приложений, а затем через обратный прокси-сервер. Я понял, что при звонке через прокси заголовок "Авторизация" отсутствует. Похоже, что прокси отбрасывает заголовок авторизации.

Это обычное поведение? Как применить заголовок авторизации при вызове через прокси-сервер?

И почему он работает с SSRS, а не с MDS?

1 Ответ

0 голосов
/ 15 октября 2019

Вы действительно должны заменить WebServer_IP в Ваших правилах перезаписи исходящих сообщений на {HTTP_HOST} (я предполагаю, что это правильная запись для IIS, она должна разрешаться для хоста, запрошенного клиентом). Это должно исключить включение механизма CORS (и, возможно, проблемы с сертификатами SSL, NAT, локальными хостами или DNS-записями, необходимыми для доступа к сервису).

Также, если CORS установлен, вам потребуется специальная конфигурация CORS, чтобы браузер мог отправлять учетные данные.

Кроме того, вы можете больше отправлять сообщения об ошибках из консоли (related to "Access-Control-Allow-Origin" довольно расплывчато).

...