How to host multiple websites on Apache2

If Apache has been your web server of choice for years, and you're finally migrating to Apache2, it's time to learn a new trick: setting up multiple virtual hosts with Apache2.

Image: Jack Wallen

If you're a Linux system administrator, chances are you've worked with Apache. And if you've done enough Apache configuration, you've most likely set up virtual hosts. But if you're finally migrating away from your old Apache-powered web platform and onto Apache2 (the version of Apache shipped with the likes of Ubuntu Server), you'll need to change your way of thinking.

I'll walk you through the process of hosting multiple websites (aka virtual hosts) on an Apache2-based system (in this case Ubuntu 16.04). Believe it or not, it's just have to know what to configure and where to configure it.

I assume you already have Apache installed and, if you point your browser to the server IP (or domain), either the Apache2 welcome page or your company site will appear. Let's add yet another site to your Apache2 server.


With Apache2, all virtual hosts are configured in individual files with /etc/apache2/sites-available. Each file will end in .conf and contain all of the details for the host. An example .conf file will look like:

Alias /nextcloud "/var/www/nextcloud/"

<Directory /var/www/nextcloud/>

Options +FollowSymlinks

AllowOverride All

<IfModule mod_dav.c>

Dav off


SetEnv HOME /var/www/nextcloud

SetEnv HTTP_HOME /var/www/nextcloud


What you see above is the sites-available file for Nextcloud—you could have multiple instances of Nextcloud on that server. Say you want, for whatever reason, Nextcloud and Nextcloud2—you could create a second sites-available .conf file for a second Nextcloud instance. Name that file nextcloud2.conf with the following contents:

Alias /nextcloud2 "/var/www/nextcloud2/"

<Directory /var/www/nextcloud2/>

Options +FollowSymlinks

AllowOverride All

<IfModule mod_dav.c>

Dav off


SetEnv HOME /var/www/nextcloud2

SetEnv HTTP_HOME /var/www/nextcloud2


Note: In order for this example to work, Nextcould would also have to be installed on the server for each instance.


The interesting thing about Apache2 is that you can create as many .conf files in /etc/apache2/sites-available as you want. But until those configuration files are enabled, Apache2 won't know about them. In order to enable those configuration files, you create the .conf file in sites-available and then use a simple command.

Say, for instance, we're setting up a test environment on our Apache2 server. We've created the test.conf file in /etc/apache2/sites-available with the contents:

Alias /test "/var/www/test/"

<Directory /var/www/test/>

Options +FollowSymlinks

AllowOverride All

SetEnv HOME /var/www/test

SetEnv HTTP_HOME /var/www/test


Once that file is in place, all we have to do is issue the command:

sudo a2ensite test.conf

The above command will copy the /etc/apache2/sites-available/test.conf file to /etc/apache2/sites-enabled and make Apache2 aware of the new host. Restart Apache2 with the command:

sudo service apache2 reload

Your test site is now available to use.


You've enabled a new website on your Apache2 server. Although this is very basic information, it will allow you to run multiple hosts on a single Apache2 server. Note: It is important that you understand the ins and outs of the Apache2 .conf files; my very basic examples are only meant to illustrate the process.

Setting up multiple hosts on Apache2 is quite different than Apache, but once you get used to the system, it makes perfect sense. Besides, if you're working with a Linux server that makes use of Apache2, you don't have a choice.

Also see

By Jack Wallen

Jack Wallen is an award-winning writer for TechRepublic and He’s an avid promoter of open source and the voice of The Android Expert. For more news about Jack Wallen, visit his website