Hosting multiple MarkLogic app servers on port 80
Dec 12, 2011
Hosting more than one MarkLogic site on a server can be tricky to the uninitiated in Apache configuration. This is not my area of expertise by any means; so given that I had to figure it out yesterday after once again forgetting how it works I think I’ll write it down here for the next time I need it. Each MarkLogic application server listens on a different high numbered port. Given the potential of draconian firewalls rules for both your hosting provider and users, typically the only reliable HTTP port will be 80. Here’s what I do on Linux and Mac OSX (sorry Windows):
- Set up my MarkLogic machine in cloud hosting (I’ve used both Amazon EC2 and Rackspace) or on on a spare machine with a dependable internet connection / power supply.
-
Running 40GB instances of MarkLogic in production is now free with the MarkLogic Express License. Woot!
- Register
.com with a hosting provider or a domain registry - The hosting provider usually will have a website where I can edit my DNS rules
- Create an A rule for
and direct it to my ML machine’s IP -
Create a second A rule for
and direct it to the ML machine’s IP - On the ML machine, install Apache2 and edit the /etc/apache2/httpd.conf file to load the following modules (add to the end of the LoadModule section if it isn’t loaded already):
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so
- Add the following virtual host records to the very bottom of the file
NameVirtualHost * <VirtualHost *> ServerName subdomain1.domain.com ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass / http://localhost:9001/ ProxyPassReverse / http://localhost:9001/ <Location /> Order allow,deny Allow from all </Location> </VirtualHost> <VirtualHost *> ServerName subdomain2.domain.com ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass / http://localhost:9002/ ProxyPassReverse / http://localhost:9002/ <Location /> Order allow,deny Allow from all </Location> </VirtualHost>
- When done editing the file restart Apache2 with the following command:
sudo /usr/sbin/apachectl restart
Now requests for subdomain1.domain.com will go to port 80 of my ML machine and then internally within the server be proxied (reverse proxied actually) to port 9001.
–Dave