Tomcat and IIS 7 both on different ip’s and different ports

iis-7tomcat

I have Tomcat and IIS 7 installed together on a Windows 2008 server. The machine has two IPs (134.133.1.1 and 134.133.2.2).

I want Tomcat to handle 134.133.1.1, on port 80, and IIS to handle both 134.133.2.2, on port 80 AND 134.133.1.1, on port 443, but can't seem to get the last two together (I can get one or the other by themselves on IIS, along with the first IP address on Tomcat).

I have configured Tomcat to successfully listen to ip 134.133.1.1, on port 80 with this configuration;

<Connector port="80" 
    protocol="HTTP/1.1"
    address="134.133.1.1"
    connectionTimeout="20000"
    redirectPort="8443" />

I also have a site configured in IIS bound to ip 134.133.1.1, on port 443 (SSL). When I turn on IIS, after Tomcat, I can reach both 134.133.1.1:80 (Tomcat) and 134.133.1.1:443 (IIS) successfully (as desired).

The problem now comes when I want to introduce a new site via IIS, at the new ip address. In IIS I have setup a new site at IP 134.133.2.2, port 80. I can not start the site. The event log shows this error;

Unable to bind to the underlying transport for [::]:80. The IP Listen-Only list may contain a reference to an interface which may not exist on this machine.  The data field contains the error number.

I think this is because IIS 7 tries to listen to port 80 on all IPs, and it cant because Tomcat is taking port 80 for 134.133.1.1. From reading, the resolution is to specify the IP address you want IIS to bind on port 80. The problem is, when I add 134.133.2.2 to the iplisten list, then I get a 404 when I try navigating to 134.133.1.1:443. I assume this is because IIS is no longer listening to ANY port on 134.133.1.1.

How do I resolve this such that IIS will return both sites?

EDIT:
Per request my IIS binding for site A is 134.133.2.2 on port 80 (http) and 134.133.2.2 on port 443. For site B in IIS, the binding is 134.133.1.1 on port 443 (https). Note the IPs in this example are just for example purposes, but consistent with my setup.

Best Answer

I had the same issue on Windows Server 2008, attempting to run Tomcat and IIS on port 80 on two separate network interfaces. In order to force IIS to listen on port 80 only on a specific network interface you must follow the instructions below. It is not enough merely to change the site bindings in IIS.

From Microsoft KB article 954874:

When you install Internet Information Services (IIS) 7.0 in Windows Server 2008, IIS binds to all IP addresses on the server, not merely the IP addresses that are assigned to Web sites. This behavior may occur even though you have set the DisableSocketPooling metabase property in the IIS configuration settings to True.

To resolve this issue, use the Netsh command prompt utility to configure the IP listen list in Windows Server 2008.

netsh http add iplisten xxx.xxx.x.x

Source: http://support.microsoft.com/kb/954874