2014-05-07 12 views
10

Ho installato URL Rewrite su un sito IIS 7.5: http://site1.com/URL Rewrite mantiene originale ospite Località quando proxy inverso 301 reindirizza

Questo agisce come un proxy inverso al secondo sito: http://site2.com/

Ecco il flusso degli eventi:
1. Il browser esegue un GET su http://site1.com/somepath
2. Questo viene passato al sito2 perché site1 è l'URL di riscrittura del proxy inverso. Funziona bene e l'host è impostato correttamente perché ho fatto il mod che richiede questo.
3. site2 risponde con uno stato 301 e imposta il HTTP Location intestazione per http://site3.com/somenewpath
4. sito1 risponde al browser con un 301 ma sostituisce l'ospite nell'intestazione Location con sito1: http://site1.com/somenewpath

Quello che ho vuole accadere nel passaggio 4 è che site1 risponde con http://site3.com/somenewpath nell'intestazione Location HTTP e fa un passaggio dritto di questi dati. Sento che ci deve essere una regola Outbound che può essere applicata per risolvere questo problema ma che non è ancora stato in grado di capirlo.

+0

Esistono regole di riscrittura in uscita esistenti? Nella mia esperienza, rimuovere le regole di riscrittura in uscita lascerebbe intatta la risposta di site2. – Woodchipper

+0

Nessuna regola in uscita sul posto. – Guy

+0

Possibile duplicato di [IIS reverse proxy con riscritture non può gestire un reindirizzamento dal server che noi proxy a] (http://stackoverflow.com/questions/4243959/iis-reverse-proxy-with-rewrites-cant-handle- a-redirect-from-the-server-we-proxy) – KyleMit

risposta

21

Potrebbe essere coinvolto Application Request Routing? Guarda IIS -> Computer o Sito -> Cache di routing della richiesta di applicazione -> Impostazioni proxy server e deseleziona la casella di controllo "Reverse rewrite host in response headers". Se lo fai a livello di macchina, diventerà effettivo per tutti i siti. Se lo fai su un sito particolare, diventerà effettivo solo per quel sito, e gli altri siti sulla scatola non saranno interessati.

+1

Non ho potuto ottenere questo abilitato su base per sito (preserveHostHeader = True), solo al livello ApplicationHost.config, qualche idea perché? Ta. Steven –

4

Come ho detto nei commenti sopra, credo che il comportamento predefinito del proxy inverso sia quello di passare la risposta non trattata (presuppone che non ci siano regole di riscrittura in uscita impostate). Tuttavia, non ho testato il tuo scenario in modo specifico con una risposta 301 dal server dietro il proxy.

Se è infatti necessaria una speciale regola di uscita, questo codice modificare l'intestazione posizione HTTP di tutte le 301 risposte 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> 

Questa regola è una lieve modifica di un inviato in URL Rewrite Module 2.0 Configuration Reference