2011-08-30 10 views
10

Używam URL Rewrite i Routing żądań aplikacji w IIS 7.5, aby skonfigurować odwrotne proxy dla kilku blogów, które muszą być zintegrowane z istniejącymi strony internetowe. Wiele domen jest związanych z jedną witryną w IIS, a każda z nich otrzyma bloga hostowanego gdzie indziej - czyli ARR i URL Rewrite. Problem polega na tym, że w moim zbiorze reguł wychodzących zmienna serwera {HTTP_HOST} ciągnie nazwa hosta serwera treści zamiast serwera proxy. Czy istnieje zmienna serwerowa, z której mogę korzystać, aby uzyskać adres hosta serwera proxy? Oto zestaw reguł dla jednego bloga z kilkoma krótkimi komentarzami do wyjaśnienia:Jak uzyskać HTTP_HOST odwrotnego serwera proxy w regułach wychodzących URL Rewrite w/ARR

<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> 

Dopóki nie wymyślimy Idę, aby zapewnić, że adresy URL blogi są unikalne tj proxyserversite1/blog1 i proxyserversite2/blog2, ale Chciałbym móc chwycić hosta serwera proxy w regułach ruchu wychodzącego, abym mógł nazwać je proxyserversite1/blog i proxyserversite2/blog. Jakieś pomysły?

Odpowiedz

12

Dodaj do reguły przychodzącej to:

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

Dodaj HTTP_PRX_HOST do wolno zmienne serwera (Działanie Pane-> Zobacz Server Variables-> Add)

niż reguł wychodzących używać {}

HTTP_PRX_HOST
+0

Świetnie! Dam ci ten strzał! – joelmdev

Powiązane problemy