URL Rewrite сохраняет исходное местоположение хоста при перенаправлении обратного прокси 301

У меня есть настройка URL Rewrite на сайте IIS 7.5: http://site1.com/

Это действует как обратный прокси-сервер для второго сайта: http://site2.com/

Вот поток событий:
1. Браузер выполняет GET на http://site1.com/somepath
2. Это передается через site2, потому что site1 - это URL-адрес перезаписи обратного прокси-сервера. Это хорошо работает, и хост правильно настроен, потому что я сделал мод, который требует этого.
3. site2 отвечает статусом 301 и устанавливает заголовок HTTP-местоположения на http://site3.com/somenewpath
4. site1 отвечает на браузер с 301 , но заменяет хост в заголовке Location с помощью site1: http://site1.com/somenewpath

Что я хочу сделать на шаге 4, так это то, что site1 отвечает http://site3.com/somenewpath в заголовке HTTP-местоположения и выполняет прямые проверки этих данных. Я чувствую, что должно существовать правило Исходящее, которое может быть применено для решения этого вопроса, но пока не удалось его выяснить.

Ответ 1

Может ли быть Маршрутизация запросов приложений? Посмотрите на IIS → Машина или сайт → Ключ маршрутизации запроса приложений → Настройки прокси сервера и снимите флажок "Обратный переписывать хост в заголовках ответов". Если вы сделаете это на уровне машины, это вступит в силу для всех сайтов. Если вы сделаете это на определенном сайте, он вступит в силу только для этого сайта, а другие сайты на нем не будут затронуты.

Ответ 2

Как я уже сказал в приведенных выше комментариях, я считаю, что поведение по умолчанию обратного прокси-сервера заключается в том, чтобы передать ответ без изменений (предполагается, что не существует правил исходящих правил перезаписи). Тем не менее, я не протестировал ваш сценарий специально с ответом 301 от сервера за прокси.

Если действительно требуется специальное исходящее правило, этот код изменит заголовок местоположения HTTP всех 301 ответов на http://site3.com/somepath

<outboundRules>
  <!-- This rule changes the domain in the HTTP location header for redirect responses -->
  <rule name="Change Location Header">
    <match serverVariable="RESPONSE_LOCATION" pattern="^http://[^/]+/(.*)" />
    <conditions>
      <add input="{RESPONSE_STATUS}" pattern="^301" />
    </conditions>
    <action type="Rewrite" value="http://www.site3.com/{R:1}" />
  </rule>
</outboundRules>

Это правило представляет собой небольшую модификацию, опубликованную в URL Rewrite Module 2.0. Ссылка на конфигурацию