20

I'm using IIS7 Application Request Routing in front of Tomcat as a replacement for ISAPI redirection. The basic reverse proxy function is working well, but I don't have enough information in the final request headers. My application exists on several subdomains: customerone.ourservice.com, customertwo.ourservice.com, etc. Each subdomain runs the same application, but with different branding graphics.

The application currently looks at the Host header to tell which branding to display. When I use the IIS7 reverse proxy, that information is lost. My headers are now:

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

Is there any way I can insert the original Host header into the request headers passed on by the reverse proxy?

1
  • I don't now, but I've noticed that in our environment our headers are swapped out by IIS7 for application/xhtml+xml for no good reason. Commented Jan 29, 2010 at 22:04

2 Answers 2

47

Application Request Routing has an option to preserve the original host header: preserveHostHeader. This option is by default false. You can enable it with:

"C:\Windows\System32\inetsrv\appcmd.exe" set config -section:system.webServer/proxy /preserveHostHeader:"True" /commit:apphost
Sign up to request clarification or add additional context in comments.

6 Comments

Thanks. I'm not able to test this any more (the application was decommissioned a few months ago), but your answer looks like the correct way to do this and I'm accepting it.
+1 - I had a similar issue with hosted YouTrack instance and this solved a problem with OpenID login not working
Anyone know why this only works in the ApplicationHost.config and not in each individual web.config??
note that appcmd.exe is in %systemroot%\system32\inetsrv\ (use full path or add it to your Paths variable) more about this here iis.net/learn/get-started/getting-started-with-iis/…
@StevendeSalas, it seems due to <section name="proxy" overrideModeDefault="Deny" allowDefinition="AppHostOnly" /> -- especially the overrideModeDefault="Deny" part.
|
2

You could set the preserveHostHeader flag by hand.

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

</system.webServer>

In the iis configuration gui you can find this value under system.webServer/proxy.

enter image description here

1 Comment

i updated the file at this location per this answer and it didn't work. Then I ran this command C:\Windows\System32\inetsrv>appcmd.exe set config -section:system.webServer/prox y /preserveHostHeader:"True" /commit:apphost Which ended up fixing the issue. It gives a nice feedback when you run it: Applied configuration changes to section "system.webServer/proxy" for "MACHINE/W EBROOT/APPHOST" at configuration commit path "MACHINE/WEBROOT/APPHOST"

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.