Обратный Прокси - должен виртуальное соответствие каталога/подпапок переписывать правила

Я пытаюсь создать обратный прокси, который перепишет все запросы к конкретному URL к другому серверу в демилитаризованной зоне. Я получил настройки и конфигурацию, работающую на основе этой статьи https://learn.iis.net/page.aspx/659/reverse-proxy-with-url-rewrite-v2-and-application-request-routing

Таким образом, моя основная установка похожа на это -

Базовый URL, который должен инициировать, переписывает - http://MySite/Custom?Data=123

URL прокси - http://MyProxyServer/Service?Data=123

Моя проблема с двумя ПОЛУЖИРНЫМИ ключевыми словами выше! Я просто, может казаться, успешно не переписываю все запросы к новому URL.

Объяснение подробно -

Когда я использую следующее правило -

<rule name="ReverseProxy" stopProcessing="true">
   <match url="Custom/(.*)" />
   <action type="Rewrite" url="http://MyProxyServer/Service{R:1}" />
</rule>

Я получаю 404 ошибки при высказывании http://MySite/Service не найденный!

Трассировка использования привела журналы req к сбою, я вижу правила работать отлично (новый URL создается правильно), но в конечном счете концы запроса с 404 ошибками.

Вещь, если я немного настраиваю правило, все хорошо работает.

Следующие работы правила -

<rule name="ReverseProxy" stopProcessing="true">
   <match url="Service/(.*)" />
   <action type="Rewrite" url="http://MyProxyServer/Service{R:1}" />
</rule>

Но я должен изменить свой базовый URL на http://MySite/Service?Data=123 от http://MySite/Custom?Data=123

Так существует ли ограничение с обратной реализацией прокси в IIS 7, где мы должны соответствовать sub названиям каталога/виртуального каталога между источником и проксировать, или действительно ли мои правила являются несоответствующими?

2
задан 8 March 2012 в 17:59
1 ответ

Существует недокументированная проблема с ARR / rewrite , где он не может отображать вложенные папки. Я добавляю это для справки и надеюсь, что это поможет другим.

Обходной путь, который я пробовал, который кажется эффективным, заключается в создании папки внутри исходного веб-приложения, добавлении web.config в эту папку с правилами, указывающими на целевое веб-приложение:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                    <match url="(.*)" />
                    <action type="Rewrite" url="http://<<<TARGET_HOSTNAME>>>{R:1}" />
                    <serverVariables>
                        <set name="HTTP_X_ORIGINAL_ACCEPT_ENCODING" value="{HTTP_ACCEPT_ENCODING}" />
                        <set name="HTTP_ACCEPT_ENCODING" value="" />
                    </serverVariables>
                </rule>
            </rules>
            <outboundRules>
                <rule name="RestoreAcceptEncoding" preCondition="RestoreAcceptEncoding">
                    <match serverVariable="HTTP_ACCEPT_ENCODING" pattern="^(.*)$" />
                    <action type="Rewrite" value="{HTTP_X_ORIGINAL_ACCEPT_ENCODING}" />
                </rule>
                <preConditions>
                    <preCondition name="RestoreAcceptEncoding">
                        <add input="{HTTP_X_ORIGINAL_ACCEPT_ENCODING}" pattern=".*" />
                    </preCondition>
                </preConditions>
            </outboundRules>
        </rewrite>
    </system.webServer>
</configuration>

Также добавлены инструкции из https://blogs.msdn.microsoft.com/friis/2016/08/25/iis-with-url-rewrite-as-a-reverse-proxy -part-2-deal-with-500-52-status-codes / вокруг GZIP

1
ответ дан 3 December 2019 в 13:11

Теги

Похожие вопросы