Step One— Create a New Directory
First, it is necessary to create a directory where we will keep the new website’s information. This location will be your Document Root in the Apache virtual configuration file. By adding a -p to the line of code, the command automatically generates all the parents for the new directory.
You will need to designate an actual DNS approved domain (or an IP address) to test that a virtual host is working. In this tutorial, we will use example.com as a placeholder for a correct domain name.
sudo mkdir -p /var/www/example.com/public_html
*If you want to use an unapproved domain name to test the process, you will find information on how to make it work on your local computer in Step Seven.
Step Two—Grant Permissions
Now you must grant ownership of the directory to the user, as opposed to just keeping it on the root system.
sudo chown -R $USER:$USER /var/www/example.com/public_html
Additionally, it is important to make sure that everyone will be able to read your new files.
sudo chmod -R 755 /var/www
Now you are all done with permissions.
Step Three- Create the Page
Within your configurations directory, create a new file called index.html
sudo nano /var/www/example.com/public_html/index.html
It’s also useful to add some text to the file, in order to have something to look at when the IP redirects to the virtual host.
<html> <head> <title>www.example.com</title> </head> <body> <h1>Success: You Have Set Up a Virtual Host</h1> </body> </html>
Save & Exit.
Step Four—Create the New Virtual Host File
The next step is to set up the apache configuration. We’re going to work off a duplicate—go ahead and make a copy of the file (naming it after your domain name) in the same directory:
sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/example.com
Step Five—Turn on Virtual Hosts
Open up the new config file:
sudo nano /etc/apache2/sites-available/example.com
We are going to set up a virtual host in this file.
To begin, insert a line for the ServerName under the ServerAdmin line.
The ServerName specifies the domain name that the virtual host uses.
If you want to make your site accessible from more than one name (ie with www in the URL), you can include the alternate names in your virtual host file by adding a ServerAlias Line. The beginning of your virtual host file would then look like this:
<VirtualHost *:80> ServerAdmin email@example.com ServerName example.com ServerAlias www.example.com [...]
The next step is to fill in the correct Document Root. For this section, write in the extension of the new directory created in Step One. If the document root is incorrect or absent you will not be able to set up the virtual host.
The section should look like this:
You do not need to make any other changes to this file. Save and Exit. The last step is to activate the host with the built-in apache shortcut:
sudo a2ensite example.com
Step Six—Restart Apache
Although there have been a lot of changes to the configuration and the virtual host is set up, none of the changes will take effect until Apache is restarted:
sudo service apache2 restart