IIS7 is quite modular, it is shipped with lots of goodies as separate modules and together it is now one of the most powerful and flexible web server.

In this post I intent to cover how we can easily configure ARR and URL Rewrite Module to get a similar functionality as of Mod Proxy in Apache.

Here I will demonstrate configuration of a reverse proxy which according to the definition is

Reverse proxy is a type of proxy server that retrieves resources on behalf of a client from one or more servers. A general use case to configure such proxies could be to handle cross domain Ajax requests, so basically if I would like to call a service hosted as http://anotherdomain.com/service from http://localdomain/service I would need to configure a proxy which will request resources from anotherdomain.com/service on behalf of localdomain ### Configuration

STEP 1: To set up a rule click on the web application from the sites tree on the left and then click on the URL Rewrite module, then form the command pallete on the right hand click on Add Rule as shown in image below.
add_rule
STEP 2: From the add rule dialog choose reverse proxy template
reverse_proxy_template

Configure Inbound Rules window and provide server name as shown in screen shot below

Finally configure the last form, this is where one can specify cache parameters and override server header variables, such as basic authentication (http_authorisation) etc.

image

In the patterns text box entering something like ^/service(.*) will trap all requests going to http://localdomain/service and they will be proxyed as if the requests were made like http://anotherdomain.com/service , The query strings if present are also carried forward, all these settings and modification are preserved in web.config of the web application, under tag. The rules after configuration look like

<rewrite>
   <rules>
       <rule stopprocessing="true" name="ReverseProxyInboundRule1">
           <match url="^service/(.*)" />
           <action url="http://anotherdomain.com/service{R:1}" type="Rewrite" />
           <servervariables />
       </rule>
   </rules>
</rewrite>