Search code examples
apacheiisnginxdnshaproxy

How to route requests to IIS and/or Apache running on different machines , 1 public IP port 80


This is my setup:

Got a domain : domain.com .

Within my local network I got DNS provided by an active directory box,

an IIS web server running on port 80, host name iis.domain.com, and this has sites iis1.domain.com, iis2.domain.com

an Apache web server running on port 80, host name apache.domain.com, with the sites apache1.domain.com and apache2.domain.com.

Within my local network I can access all these sites just fine. I also have external dns entries for iis1,iis2,apache1 and apache2.

I only have one public IP address and I would like to setup another box which would get port forwarded into the internet ( port forward port 80 and 443 ). I would like to know what to install on that box and how to configure it.

I have looked at nginx, haproxy and IIS ARR, but I would like to know which of these are the easiest to setup and have the least overhead.

In my mind I would like to specify something like.... ok if it's a request for site iis1.domain.com then take that one to the IIS web server, and if it is for apache1.domain.com then go to the Apache web server. I would like to go with a Linux solution, but I am not sure which and how to set it up.

Thank you in advance.

P.S. I saw a possible solution here.

Would something like this work ?

server {

        listen 80 default_server;

        server_name iis1.domain.com;

        location / {
                        proxy_pass http://iis1.domain.com/;
        }

}

server {

        listen 80 default_server;

        server_name apache1.domain.com;

        location / {
                        proxy_pass http://apache1.domain.com/;
        }

}

Solution

  • I would go with haproxy (easiest in my opinion)
    just be very careful with your External vs Internal DNS. the example you have in your question forwards to a dns....which points back to the proxy(external)....which points to the dns...i think you get my meaning.

    HAProxy would point to your backends IP address so both internal and external DNS would point to your proxy and get routed fine to its intended backend

    the HAProxy config would look something like this :

    global
        # default globals
    defaults
        # default globals
    frontend http-in
        bind                        YOUR.IP.GOES.HERE:80
        bind                        YOUR.IP.GOES.HERE:443 ssl crt PATH/TO/CERT-FILE.PEM no-sslv3
        mode                        http
        option                      httplog
        option                      httpclose
        option                      forwardfor
    
        acl iis1                    hdr(Host) -i iis1.domain.com
        acl iis2                    hdr(Host) -i iis2.domain.com
        acl apache1                 hdr(Host) -i apache1.domain.com
        acl apache2                 hdr(Host) -i apache2.domain.com
    
        use_backend iis if iis1
        use_backend iis if iis2
        use_backend apache  if apache1
        use_backend apache  if apache2    
    
     backend iis
            server IIS      xxx.xxx.xxx.xxx:80 check
    
     backend apache
            server APACHE   xxx.xxx.xxx.yyy:80 check