2014-05-07 10 views
10

mam URL konfiguracji Rewrite na IIS 7.5 stronie: http://site1.com/URL Rewrite zachowuje oryginalną hosta Lokalizacja gdy reverse proxy 301 przekierowuje

ten działa jako serwer proxy odwrotnej do drugiej strony: http://site2.com/

Oto przepływu zdarzeń:
1. Przeglądarka wykonuje GET na http://site1.com/somepath
2. To zostaje przekazane do witryny2, ponieważ witryna1 jest adresem URL Rewrite reverse proxy. To działa dobrze i host jest poprawnie ustawiony, ponieważ zrobiłem mod, który tego wymaga.
3. witryna2 reaguje ze statusem 301 i ustawia nagłówek HTTP Location do http://site3.com/somenewpath
4. site1 reaguje na przeglądarce z 301 ale zastępuje szereg w nagłówku Location z site1: http://site1.com/somenewpath

Co ja chce się zdarzyć w kroku 4 jest to, że witryna1 odpowiada http://site3.com/somenewpath w nagłówku lokalizacji HTTP i wykonuje proste przejście tych danych. Uważam, że musi istnieć reguła Outbound, którą można zastosować w celu rozwiązania tego problemu, ale nie udało się jej jeszcze zrozumieć.

+0

Czy istnieją jakieś istniejące reguły przepisywania wychodzącego? Z mojego doświadczenia wynika, że ​​usunięcie reguł przepisywania wychodzącego pozostawia nienaruszoną odpowiedź2. – Woodchipper

+0

Brak reguł dotyczących ruchu wychodzącego. – Guy

+0

Możliwy duplikat odwrotnego proxy [IIS z przepisywaniem nie może obsłużyć przekierowania z serwera, na który mamy serwer proxy] (http://stackoverflow.com/questions/4243959/iis-reverse-proxy-with-rewrites-cant-handle- a-redirect-from-server-we-proxy) – KyleMit

Odpowiedz

21

Czy może być zaangażowany Application Request Routing? Spójrz na IIS -> Maszyna lub Witryna -> Zapytanie o aplikację Routing Cache -> Ustawienia serwera proxy i odznacz pole "Odwról pisownię odpowiedzi w nagłówkach odpowiedzi". Jeśli zrobisz to na poziomie komputera, zacznie obowiązywać dla wszystkich witryn. Jeśli zrobisz to w konkretnej witrynie, będzie ona obowiązywać tylko w tej witrynie, a inne witryny w tym polu pozostaną nienaruszone.

+1

Nie mogłem włączyć tej opcji dla poszczególnych witryn (preserveHostHeader = True), tylko na poziomie ApplicationHost.config, dlaczego? Ta. Steven –

4

Jak już powiedziałem w powyższych komentarzach, uważam, że domyślnym zachowaniem odwrotnego proxy jest przejście przez nietkniętą odpowiedź (przy założeniu, że nie ma ustawionych wychodzących reguł). Jednak nie przetestowałem twojego scenariusza specjalnie z odpowiedzią 301 z serwera za proxy.

Jeżeli szczególny przepis wychodzące jest w rzeczywistości potrzebne, ten kod modyfikuje nagłówek lokalizacji HTTP wszystkich 301 odpowiedzi na 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> 

Zasada ta jest nieznaczna modyfikacja jednego pisał w URL Rewrite Module 2.0 Configuration Reference

Powiązane problemy