2009-12-03 2 views
14

J'utilise le routage de demande d'application IIS7 devant Tomcat en remplacement de la redirection ISAPI. La fonction proxy inverse de base fonctionne bien, mais je n'ai pas assez d'informations dans les en-têtes de demande finaux. Mon application existe sur plusieurs sous-domaines: customerone.ourservice.com, customertwo.ourservice.com, etc. Chaque sous-domaine exécute la même application, mais avec des graphismes de marque différents.Modification d'en-têtes avec le routage de demande d'application IIS7

L'application examine actuellement l'en-tête Host pour indiquer l'image de marque à afficher. Lorsque j'utilise le proxy inverse IIS7, cette information est perdue. Mes têtes sont maintenant:

accept = text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
accept-charset = ISO-8859-1,utf-8;q=0.7,*;q=0.7 
accept-encoding = gzip,deflate 
accept-language = en-gb,en;q=0.7,en-us;q=0.3 
cookie = JSESSIONID=...... 
host = 127.0.0.1:8080 
max-forwards = 10 
user-agent = Mozilla/5.0 (X11; U; Linux x86_64; en-GB; rv:1.9.0.15) Gecko/2009102815 Ubuntu/9.04 (jaunty) Firefox/3.0.15 
x-original-url =/
x-forwarded-for = [iis7ip]:47567 
x-arr-log-id = affbf81c-a5cf-4212-a43b-901cd9adcee6 
connection = Keep-Alive 

Est-il possible que je peux insérer l'en-tête de l'hôte d'origine dans les en-têtes de requête transmis par le proxy inverse?

+0

Je ne maintenant, mais je l'ai remarqué que dans notre environnement de nos têtes sont permutés par IIS7 pour l'application/xhtml + xml pour aucune bonne raison. – furtive

Répondre

32

Application Request Routing a une option pour préserver l'en-tête d'hôte d'origine: preserveHostHeader. Cette option est fausse par défaut. Vous pouvez l'activer avec:

"C:\Windows\System32\inetsrv\appcmd.exe" set config -section:system.webServer/proxy /preserveHostHeader:"True" /commit:apphost 
+0

Merci. Je ne suis plus capable de tester cela (l'application a été mise hors service il y a quelques mois), mais votre réponse semble être la bonne façon de le faire et je l'accepte. –

+0

+1 - J'ai eu un problème similaire avec l'instance YouTrack hébergée et cela a résolu un problème avec la connexion OpenID ne fonctionne pas –

+3

Quelqu'un sait pourquoi cela ne fonctionne que dans le 'ApplicationHost.config' et non dans chaque' web.config '? –

1

Vous pouvez définir le drapeau preserveHostHeader à la main.

<proxy enabled="true" preserveHostHeader="true" /> 

</system.webServer> 

Dans la configuration iis vous pouvez trouver IUG cette valeur sous system.webServer/proxy.

enter image description here

+0

J'ai mis à jour le fichier à cet emplacement par cette réponse et cela n'a pas fonctionné. Ensuite, j'ai exécuté cette commande C: \ Windows \ System32 \ inetsrv> appcmd.exe définir config -section: system.webServer/prox y/preserveHostHeader: "Vrai"/commit: apphost Qui a fini par résoudre le problème. Il donne un bon retour quand vous l'exécutez: La configuration appliquée change à la section "system.webServer/proxy" pour "MACHINE/W EBROOT/APPHOST" au chemin de validation de configuration "MACHINE/WEBROOT/APPHOST" – BraveNewMath

Questions connexes