Installing and Setting Virtual Hosts for Apache on Ubuntu 18.04


Reading Time: 5 mins


Apache, an open-source and most widely used web server across the world. Originally known as the “Apache HTTP Server”, is now widely known as ‘Apache’. It is a process-driven approach and which enables it to create new threads for each new request. Reputed for its security, stability and reliability, 67% of all the web-servers is run by using this server. Further, it provides cross-platform support and supports almost every language such as PHP, Perl, Python, etc.


  • It is to be noted that the given instructions are applied to installing Apache server on Ubuntu 18.04.
  • Presuming that you are logged in as a non-root user (in which sudo privileges is necessary).

Step 1: Updating the Default System Packages

Before installing the Apache server on your system, you need to update the default system packages to the newest version. To do so, run the following commands:

sudo apt-get update
sudo apt-get upgrade

Step 2: Installing Apache

Next, to install the Apache server on your Ubuntu system, use the command:

sudo apt-get install apache2

By this time, Apache has been successfully installed in your system.


Step 3: Configuring the Firewall

Adjusting the firewall is necessary to provide access for users to connect with the server. For this, you need to enable the firewall (as by default, it is set not to allow incoming traffic) using the command:

sudo ufw enable

To disable the firewall, use the command:

sudo ufw disable

To view the default ufw rules, use the command:

sudo ufw app list

You will be presented with the list of Apache’s application profiles.

Status: active
To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Apache Full                ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Apache Full (v6)           ALLOW       Anywhere (v6)

To allow the configured profiles such as Apache Full and Apache HTTP use following commands:

sudo ufw allow ‘Apache’

Now, to verify the change, run the following command:

sudo ufw status

You should see the output like the below one,

Status: active
To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Apache Full                ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Apache Full (v6)           ALLOW       Anywhere (v6)

STEP 4: Testing Apache

To verify whether the Apache server starts running and the status of its service, use the command:

sudo systemctl status apache2
● apache2.service – The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
Active: active (running) since Tue 2018-04-24 20:14:39 UTC; 9min ago
Main PID: 2583 (apache2)
Tasks: 55 (limit: 1153)
CGroup: /system.slice/apache2.service
├─2583 /usr/sbin/apache2 -k start
├─2585 /usr/sbin/apache2 -k start
└─2586 /usr/sbin/apache2 -k start

Though the output confirms the successful activation of the Apache server, another such proper way to confirm the fine-working of the Apache server is by requesting a page from the server. In order to verify your accession to the server’s landing page, you need your IP address.
To get your IP address within the terminal, type the below-shown command:


Note: The only other way to get your IP address is by logging into your web server.
Soon after you get your IP address, type it into your preferred browser.

http://ip_address or server_domain/

Post which, you will see the default Apache 18.04 web page for Ubuntu.


Step 5: Setting Up Virtual Hosts for Apache


a) Creating Server Blocks:

Much similar to the Server Blocks for Nginx is the Virtual Hosts for Apache. You can also host more than one website from the single server of Apache. For the sake of reference, we will use as a domain name and you can replace this domain name as per your preference. By default, Apache has an enabled server block at /var/www/html which is generally configured to server documents from out of the directory. Further, this comes in handy in serving only a single website.
In order to host multiple websites, you need to create a new directory structure within the /var/www/ for your and within each of these directories, a public-html will be created to store the domain files.
To create a directory for,

sudo mkdir /var/www/

To assign the ownership of the directory to the current signed-in account using the $USER environment variable:

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

Note: This helps to edit and manage the content right from the directory.
To assign the permissions of the web root directory, type

sudo chmod -R 755 /var/www/

b) Adding Content for

Now, to add the content in the website, create an index.html page for the

sudo nano /var/www/

Let us try adding the sample content.


        <title>Welcome to!</title>
        <h1>You have successfully added html content in the </h1>


c) Creating Server Blocks

Though you have successfully created content, a server block is needed for the Apache server to serve the content. Create a new server block to host the site by leaving out the default block of the Apache server to be used as a template for basic configurations.

sudo nano /etc/apache2/sites-available/

Note: It is important that every other configuration file with regard to your newly created site, must be included within the .conf .
Copy it to the following configuration block (which looks similar to that of the default block but revised as per the created new directory and domain).

<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

d) Enabling Server Block

Now, to enable the created configuration file, let us use the a2ensite tool.

sudo a2ensite

Though now it is ok to activate the created file, you need to disable the default site first.

sudo a2dissite 000-default.conf

Next, you can restart the Apache service, using the command:

sudo systemctl restart apache2

e) Checking for Syntax Errors:

To check for configuration errors, use the command:

sudo apache2ctl configtest

You will see an output like this,

Syntax OK

F) Testing Apache Service:

Now that we have configured the Apache server to serve your domain name (here, it is, the server has been already up and running.
To verify the status of the Apache service, type your server name in any one of your preferred browser running on your system.


The above image confirms that the Apache server works successfully.


Step 6: Managing the Apache Server

Now that you have your web server up and running, let’s get to know about some basic commands for managing the Apache service.
To stop your web server, use the command:

sudo systemctl stop apache2

To start your web server, use the command:

sudo systemctl start apache2

To restart your web server, use the command:

sudo systemctl restart apache2

To reload your web server, use the command:

sudo systemctl reload apache2

To disable your web server, use the command:

sudo systemctl disable apache2

To enable your web server, use the command:

sudo systemctl enable apache2

You have been successfully configured the Apache server to host your site by creating a server block. Likewise, you can create any number of server blocks using a similar procedure for the domains you desire to host. Thus, this is all about installing, configuring and creating server blocks for the Apache server on Ubuntu 18.04 system. Further, the Testing Apache and Testing Apache Service steps verify the successful running status of the Apache server on your system.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top