Skip to content

Setting up IIS as a reverse proxy

Overview

tl;dr;

This post is all about setting up IIS(8.5) in order to be used as a reverse proxy.

Use multiple different Webservers (IIS/Apache/Tomcat) and run them on the same server and port.

Installing IIS

Just install IIS by using the add roles and feature functionality of windows server 2012

Installing apache

I currently have the problem that I own a windows 2012 virtual server, and need to run IIS and Apache on it. Installation is actually super easy, just install IIS and then Apache (I took the apache binaries for windows from apachehaus )

But if you now try to start apache, the following error will show up:

(OS 10013)An attempt was made to access a socket in a way forbidden by its access permissions.  : AH00072: make_sock: could not bind to address [::]:80

image_thumb

This happens because I'm trying to open port 80 with apache while port 80 is already used by IIS.  And the same would happen when I try to start Tomcat or any other server which tries to run on port 80.

This error can be avoided by setting the Listen Port  of apache to anything different than port 80, i.e. 8080. Problem with this solution is that any site served by apache can only be reached via port 8080 which is super uncool since a user then has to enter the port 8080 together with the domain name.

Setup IIS

In order to use IIS as a reverse proxy, the rewrite module must be installed. This can be done by downloading it from the microsoft website

image_thumb6

To get rewrite(Not only redirect) working, the application request routing must be installed as well from the microsoft website

Now the Application Request Routing must be configured in IIS manager. It's as simple as checking the Enable proxy checkbox.

image_thumb8

image_thumb10

Now a new website must be added in IIS pointing to an empty directory. In order for IIS to act properly as a proxy, this website must be bound to a host name. (For this demo and since I don't have a hostname, I just added a entry into the host file of the computer)

image_thumb4

When now connecting to this site, noting must be shown since there is no content in the configured folder.

Next step is to setup the rewrite rule.

Setup rewrite rule in IIS

Add a new Blank rule via URL rewrite

image_thumb15

image_thumb14

The rule must look like the following sample.

This is the corresponding web.config to the screenshot below:



    
        
            
                
                    
                    
                
            
        
    


image_thumb17

Done

Now it's done. Requests sent to proxytest.com:80 will be rewritten from IIS to the address from rewrite URL.

With this configuration, it's possible to run IIS, Apache, Tomcat and many other webserver at the same time on the same server under the same port.

Great thing.

Trackbacks

No Trackbacks

Comments

Display comments as Linear | Threaded

Vijay on :

Does it works for tomcat?

Donato on :

I'm having problems passing authorization headers to my Apache-powered web application listening to port 8080... Is there any configuration to be set?

pelle on :

It works fine except css /js dont seem to load... for some reason..

Add Comment

You can use [geshi lang=lang_name [,ln={y|n}]][/geshi] tags to embed source code snippets.
Markdown format allowed
Form options