Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Modifying headers with IIS7 Application Request Routing

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?

like image 655
Adrian Cox Avatar asked Dec 03 '09 20:12

Adrian Cox


People also ask

What is Application Request Routing in asr?

Introduction. Microsoft Application Request Routing (ARR) for IIS 7 and above is a proxy-based routing module that forwards HTTP requests to content servers based on HTTP headers, server variables, and load balance algorithms. ARR can be used to: Increase application availability and scalability.


2 Answers

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
like image 176
Atacan Avatar answered Oct 01 '22 19:10

Atacan


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

like image 22
hdev Avatar answered Oct 01 '22 18:10

hdev