How to set up Apache Virtual Hosts on Ubuntu 18.04

Filed Under: Ubuntu

The Apache HTTP Web server is a powerful, free and open source web server that has been, and remains the leading web server platform ahead of others such as Nginx and Microsoft IIS.

According to Apache enjoys a market share of 45.9%, and powers popular sites such as PayPal, Apple, Craigslist, Adobe, and BBC to mention just but a few.

What is Virtual Host?

Apache web server allows us to create individual units which can be configured and customized independently to serve multiple sites on the same server. This is known as virtual hosting.

This happens when multiple domain names, each handled separately, are hosted on a single server. The server is thereby able to share its resources such as disk space and memory utilization.

Each domain is configured to direct traffic to a unique directory containing information specific to that domain name.

A widely used application of virtual hosting is in shared web hosting where multiple customers are hosted on a single server. This is a cheaper alternative than dedicated hosting which is far more expensive.

In this guide, we will delve in setting up and configuration of Apache Virtual hosts on Ubuntu 18.04 LTS.

Installing Apache Web Server

Before installing Apache, it is a good idea to update the package repository. You can do this by running the following commands:

# sudo apt update

Thereafter, install the Apache web server.

# sudo apt install apache2

The two commands mark the first of a very important process. For illustration purposes, we will use and as our virtual hosts.

Following this guide will also take you through testing both domains and see if the configurations are working.

Creating directory structures for virtual hosts

We need a directory that will hold the data that can be accessed by users. Apache usually has a root document directory that serves users seeking information from it. Content within the root directory is assigned to individual users under the /var/www directory.

Within each of these directories, we need a folder public folder (public_html) to hold all the uploaded files.

Run the following commands to create the two directories:

# sudo mkdir -p /var/www/
# sudo mkdir -p /var/www/

Granting Permissions

Now that we have the directory structures in place, we need to assign ownership to regular users so that they can modify files contained in the directories. To accomplish this, we need to run the commands as shown.

# sudo chown -R $USER:$USER /var/www/
# sudo chown -R $USER:$USER /var/www/

The $USER variable takes the value of the currently logged on user upon pressing ‘Enter’. This allows the regular user to own the subdirectories contained in public_html which will host our content.

To serve the webpages of the virtual hosts properly, we need to assign read permissions to the general www directory which will recursively assign read permissions to the files and folders therein. To achieve this, run

# sudo chmod -R 755 /var/www

At this point, our web server should have the requisite permissions to serve the content and users should also be able to create their own content within the respective directories.

Create new virtual host files

We need to copy the file to the first domain:

# sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/

Let us open the new file using nano as shown:

# sudo nano /etc/apache2/sites-available/

You can either choose to leave it the way it is or make it more presentable for the first timer in VPS installation (note that the original file has # which denotes comments explaining what every line stands for).

virtual host config file

From the file above the virtual host will process any request made on port 80 with the default protocol used here is the HTTP.

We need to assign a working email to the ServerAdmin attribute. In this case, we will use

We will then add two lines:

  1. ServerName, which matches the base domain for the particular virtual host.
  2. ServerAlias that defines any other name that should closely match the base domain name. In this case, we will use www.

For the DocumentRoot attribute, change the path to reflect the virtual host file path.

All the three changes can be summarized by editing the virtual host file to look like this:

Document Root

Save the changes and exit.

Let’s copy the first Virtual host and customize for (the other domain)

We copy it by:

# sudo cp /etc/apache2/sites-available/ /etc/apache2/sites-available/

Open and edit the file as shown:

# sudo nano /etc/apache2/sites-available/

Open the configuration file and make the corresponding changes where needed

Virtual Host 2

Save and exit the configuration file.

Enabling newly created hosts files

Apache has some inbuilt tools that enable us to “activate” files. You can use the a2ensite tool to accomplish this as shown:

# sudo a2ensite
# sudo a2ensite

Next, restart the Apache web server for the changes to take effect.

# sudo systemctl restart apache2

To test the functionality of your VPS, you need to modify the hosts file on the local computer. This helps re-direct domain requests to your VPS servers. This works the same way DNS systems operate when registering new domains.

The following steps should be performed on the local workstation and not the VPS server. You need to log in as the root for this to work. Edit the /etc/hosts file as shown.

# sudo vim /etc/hosts

On this file, you need to add the public address (IP) of your VPS server then the domain name used to access the VPS. In my case, my VPS address is; consequently, I will edit my hosts’ file as shown:

editing the Hosts File

Save and exit the text editor.

The above changes mean that any visitor’s request to and will be directed through This is how domains are redirected on Virtual Hosts.

Testing the virtual servers

Now that we are done with configuring of our virtual hosts it’s time to verify if all went all. For a start, you can check the accessibility of the two virtual hosts on the terminal using the ping command

Ping Virtual Host 1

Wonderful! We can reach the virtual host. You can now proceed and open your browser and visit the URL.

Web Page Of Virtual Host 1

Great! Our first virtual host is working. Let’s try pinging our second virtual host

Ping Virtual Host 2

Similarly, open your browser and visit the virtual host’s URL

Web Page Of Virtual Host 2


Apache HTTP web server can be easily configured to serve multiple websites from a single server. In this tutorial, we learned how to set up multiple virtual hosts configuration files in the apache web server.


  1. Mohanraj says:

    How to host the registered domain on a dedicated server?

Comments are closed.

Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors