Well, I finally had to enable some PHP sites on my servers, effectively ending my ColdFusion-only epoch. Getting IIS up and running alongside JBoss (or even JRun) turned out to be ridiculously easy with Apache. As was my experience with JBoss, the documentation from the vendor turned out to be somewhere between poor to adequate and I ended up relying almost completely on the examples and tutorials placed out by others on the Web.
Now that I think about it, it wasn’t “ridiculously” easy because I had a problem with IIS and JBoss attempting to listen on the same IP address even though I went into IIS and changed the configuration. Luckily this was a documented issue and I found the resolution easily (more info below).
Step 1 – Install Apache
I downloaded version 2.0.58 which works just fine for my purposes.
Apache Configuration
Find the ‘Listen’ section of in the \Apache\conf\httpd.conf file and specify the IP address and port on which Apache is listening.
Listen 192.168.1.200:80
Now, since I’m hosting multiple domains on my system, I need Apache’s virtual hosts to match up with each JBoss virtual host. You can read my article on hosting multiple domains with JBoss for more information on that. the first thing to do is tell Apache that this IP/Port will be using Named Virtual Hosts instead of IP Virtual Hosts.
NameVirtualHost 192.168.1.200:80
Now that Apache knows the it’s going to be accepting request for multiple domain names, we need to set up each of those domains using the <virtualhost> tag. All you need to specify is the ServerName property, which the the base URL of the domain, and the ProxyPass property which simply tells Apache where to redirect the original request.
<virtualhost>
ServerName www.orbwave.com
ProxyPass / http://www.orbwave.com:8080/
</virtualhost>
<virtualhost>
ServerName www.fusioncube.net
ProxyPass / http://www.fusioncube.net:8080/
</virtualhost>
JBoss Configuration
As you can see above, if you’ve got JBoss listening on port 80, it will conflict with Apache and you need to reset it to listen on port 8080. Then Apache redirects the request to port 8080 to be fulfilled by JBoss.
IIS Configuration
Now here’s the tricky part. IIS can’t listen to requests on the same IP address as Apache or it tries to hijack all requests by default. Therefore, you need two IP addresses to be assigned to the server accepting these HTTP requests. Two ways to do that:
- Install another network adapter, assign is a distinct, static IP address and plug it into the network.
- Assign another IP address to the network adapter you’re already using.
Now you have to disable socket pooling in IIS. You have to use a utility called Httpcfg.exe to disable it. This utility is found in the /Support/Tools folder on your Windows Server 2003 CD.
Open a command prompt and type httpcfg set iplisten -i w.x.y.z:n to set the new IP address (w.x.y.x) you added to your network card and port number on which you want IIS to listen. This inclusion list specifies which IP addresses http.sys listens on and is initially empty by default, which means that IIS listens to all IP addresses.
Then restart IIS because http.sys reads this list only on startup. You don’t have to restart all IIS services, only the HTTP Service.
Summary
It takes a little work, but it’s not difficult as long as you have all the information. I now have PHP, ColdFusion and ASP sites running happily on the same server thanks to this setup and I (and a few clients) couldn’t be happier.