Как получить HTTP_HOST обратного прокси-сервера в исходящих правилах URL Rewrite w / ARR - PullRequest
12 голосов
/ 30 августа 2011

Я использую перезапись URL-адресов и маршрутизацию запросов приложений в IIS 7.5 для настройки обратного прокси-сервера для пары блогов, которые необходимо интегрировать в существующие веб-сайты.Несколько доменов привязаны к одному веб-сайту в IIS, и каждый из них получит блог, который размещен в другом месте - там, где приходят ARR и URL Rewrite. Проблема, с которой я сталкиваюсь, состоит в том, что в моем исходящем наборе правил переменная сервера {HTTP_HOST} извлекаетимя хоста контент-сервера вместо прокси-сервера.Есть ли переменная сервера, которую я могу использовать, которая даст мне проклятие хоста прокси-сервера?Вот набор правил для одного блога с несколькими короткими комментариями для пояснения:

  <rewrite>
      <rules>
          <rule name="Route requests for contentserver blog" stopProcessing="true">
              <match url="^blog/(.*)" />
              <conditions trackAllCaptures="true">
                  <add input="{CACHE_URL}" pattern="^(https?)://" />
                  <add input="{HTTP_HOST}" pattern="(www\.)proxyserver\.com$" /> <!--this works-->
              </conditions>
              <action type="Rewrite" url="{C:1}://blog.contentserver.com/{R:1}" />
          </rule>
      </rules>
      <outboundRules>
          <rule name="Rewrite Relative URLs" preCondition="ResponseIsHtml" stopProcessing="true">
              <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^/(.*)" negate="false" />
              <action type="Rewrite" value="/blog/{R:1}" />
              <conditions>
                  <add input="{URL}" pattern="^/blog/" />
                  <add input="{HTTP_HOST}" pattern="^(www\.)proxyserver\.com$" /> <!--this doesnt work because it's grabbing the content server's host, not the proxy server's host-->
              </conditions>
          </rule>
          <rule name="Rewrite Absolute URLs" preCondition="ResponseIsHtml" stopProcessing="true">
              <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^(https?)://blog\.contentserver\.com(/(.*))?" />
              <action type="Rewrite" value="/blog/{R:3}" />
              <conditions>
                  <add input="{HTTP_HOST}" pattern="^(www\.)proxyserver\.com$" /> <!--this doesnt work because it's grabbing the content server's host, not the proxy server's host-->
                  <add input="{URL}" pattern="^/blog/" />
              </conditions>
          </rule>
          <preConditions>
              <preCondition name="ResponseIsHtml">
                  <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
              </preCondition>
          </preConditions>
      </outboundRules>
  </rewrite>

Пока я не выясню это, я просто хочу убедиться, что URL-адреса блогов уникальны, т.е. proxyserversite1 / blog1 и proxyserversite2 / blog2,но я хотел бы иметь возможность получить хост прокси-сервера в правилах исходящих сообщений, чтобы я мог назвать их proxyserversite1 / blog и proxyserversite2 / blog.Есть идеи?

1 Ответ

14 голосов
/ 28 февраля 2012

Добавьте к входящему правилу следующее:

<serverVariables>
    <set name="HTTP_PRX_HOST" value="{HTTP_HOST}" />
</serverVariables>

Добавьте HTTP_PRX_HOST к разрешенным серверным переменным (Панель действий-> Просмотреть серверные переменные-> Добавить)

Чем в ваших исходящих правилах использовать {HTTP_PRX_HOST}

...