2011-08-30 26 views
10

Tôi đang sử dụng URL Rewrite và Application Request Routing trong IIS 7.5 để thiết lập proxy ngược cho một vài blog cần được tích hợp vào trang web. Nhiều tên miền bị ràng buộc vào một trang web trong IIS, và mỗi miền sẽ nhận được một blog được lưu trữ ở nơi khác - đó là nơi ARR và URL Rewrite đi vào. Vấn đề tôi gặp phải là trong ruleset gửi đi của tôi, biến máy chủ {HTTP_HOST} kéo tên máy chủ của máy chủ nội dung thay vì tên máy chủ proxy. Có một biến máy chủ mà tôi có thể sử dụng sẽ cung cấp cho tôi máy chủ lưu trữ của máy chủ proxy không? Dưới đây là một ruleset cho một blog với một số ý kiến ​​ngắn để làm rõ:Cách nhận HTTP_HOST của máy chủ proxy ngược trong quy tắc gửi đi của 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> 

Cho đến khi tôi con số này ra tôi chỉ cần đi để đảm bảo rằng các url viết blog là duy nhất tức là, proxyserversite1/blog1 và proxyserversite2/blog2, nhưng tôi Tôi muốn có thể lấy máy chủ proxy trong các quy tắc gửi đi để tôi có thể đặt tên cho chúng là proxyserversite1/blog và proxyserversite2/blog. Bất kỳ ý tưởng?

Trả lời

12

Thêm vào rule gửi đến này:

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

Thêm HTTP_PRX_HOST để cho phép biến máy chủ (Action Pane-> Xem máy chủ Variables-> Add)

hơn trong các quy tắc khởi hành bạn sử dụng {} HTTP_PRX_HOST

+0

Tuyệt vời! Tôi sẽ cho cú đánh này! – joelmdev

Các vấn đề liên quan