John's Blog: OS X Server 5 Port Conflicts

October 20, 2015

A single server can run multiple services. This is especially true of a Rumpus server, since Rumpus is very efficient and seldom uses anywhere near all of the CPU, memory and other resources of a modern Mac. So, many administrators run Rumpus along with OS X Server, and the 2 co-exist perfectly with one notable exception: port conflicts.

The basic problem is that, if both Rumpus and OS X Server are trying to run the same service, both will try to bind to the default service port and create a conflict. The problem is usually associated with Web service, on port 80. OS X Server uses HTTP not only to provide traditional Web service, but also as a mechanism for providing Contacts, Wikis, and other services. The result is that, on pretty much any OS X Server, Apache is going to bind to the HTTP port, blocking Rumpus from doing the same.

So the question is, how can you run both OS X Server and Rumpus on the same Mac server?

Note: The rest of this article is specific to OS X Server 5 and later. If you are running OS X Server 4 or earlier, see my older blog post on the matter.

The best strategy I have found for avoiding conflicts between Rumpus and OS X Server is to separate the services by IP address.

Both Rumpus and OS X Server, by default, will bind services to the default port for that service on all available IP addresses. In the case of HTTP, this means that both Rumpus and OS X Server will try to bind to port 80 on all available interfaces. So to resolve the conflict, what is needed is a multi-interface solution.

Step 1: Create 2 Interfaces

On the Mac, it's pretty easy to define multiple network interfaces (IP addresses). The task is performed in System Preferences, on the Network panel. The details depend a bit on your network, and Google is sure to provide help if you aren't sure how to assign multiple IP addresses to your Mac.

Step 2: Choose an IP Address for Rumpus

In Rumpus, it's really easy to select a specific IP address for service. Just open the Network Settings window, and select the desired address from the "Address To Serve On" pop-up menu.

Step 3: Set the IP Address for OS X Server

Now for the slightly tricky part. If you look at the Web Service in OS X Server, you'll see that it wants to bind to port 80 on all addresses. There is no interface for changing that behavior, but we can do it by manually editing the config files.

You can use any text editor for this part, but I recommend either TextWrangler (which is free) or BBEdit (a more-than-worth-it paid application). Bare Bones' products, aside from being great editors, won't alter line endings or encodings that can make a mess out of tweaking sensitive config files.

Open the file:

/Library/Server/Web/Config/apache2/httpd_server_app.conf

Now find the line that looks like this:

#Listen 12.34.56.78:80

Remove the comment and set the IP address to the address that you have assigned to Apache (in other words, the address other than the one selected in Rumpus). For example, if the address you have assigned to Apache is "192.168.1.100", you would change the line to:

Listen 192.168.1.100:80

Save the change, close the file, and then open the file:

/Library/Server/Web/Config/Proxy/apache_serviceproxy.conf

In this config file, you will find "listen" configuration settings for several ports, including 80, 443, 8008, 8800, 8443 and 8843. Alter them so that instead of an asterisk, the Apache address is specified. To set OS X Server's proxy service to bind only to the example address "192.168.1.100", the "listen" config section would look like this:

listen 192.168.1.100:80
listen 192.168.1.100:443
listen 192.168.1.100:8008
listen 192.168.1.100:8800
listen 192.168.1.100:8443
listen 192.168.1.100:8843

Finally, save the change and quit your text editor.

Step 4: Restart and Test

With changes made, restart the entire Mac server. When it comes up, you should be able to connect to OS X Server's Web services on it's assigned IP address, and Rumpus on the other.

Final Notes:

This is a common problem for Rumpus administrators, so I've tried to lay out the best solution I can. With that said, the real problem is that OS X Server does not offer the basic configuration option of binding services to a particular IP address or port. Maxum can't be responsible for OS X Server's services and configuration options, and if you have problems with the setup described above, I can't promise that Maxum tech support will be able to help resolve the problem. Of course, I'll always do my best to help Rumpus administrators work through problems, when I can.

OS X Server may revert the settings described above. I am not sure how OS X Server tracks and updates Apache config files, so it's possible that you may need to reconfigure the config files again in the future, if OS X Server were ever to rewrite those files.

© Copyright 2017, Maxum Development Corp.