Apache Virtual Host Setup
Learn how to set up a virtual host in an Apache-like server and in GNU/Linux.
Setting up a web server like Apache gives us only one domain, which is http://localhost
. This domain is associated with the 127.0.0.1
IP address.
One host per server —localhost
As we stated above, we are only allowed to have on the website by a web server. To get around this limitation, we’ll create different directories, each for one website on the localhost:
http://localhost/time-tracker
http://localhost/smartsapp
We have two directories in http://localhost
. We can add as many as we want.
Although this solution is helpful it has its own issues as well:
- It does not reflect the reality of the production server, where each site has its own domain (
http://time-tracker.com
). - We may encounter issues with relative paths.
To avoid issues in a production server, it would be better if we have a local environment that is almost the same as the production environment.
Multiple hosts per server —virtual host
To allow more than one website to work on one system or web server, each with their own domain name, we’ll need to activate the virtual host feature on that server. For instance, both www.amezon.cd
and www.facebook.cd
can be hosted on the same web server.
There are many types of virtual host methods, but the most widely used one is the name-based virtual host method. The name-based virtual host method allows one IP address (for example, 127.0.0.1
) to host more than one website (host name). This approach allows for an unlimited number of servers, ease of configuration and use, and requires no additional hardware or software.
Three steps to create a virtual host
Step 1: Create a new virtual host
We’ll need to create a virtual host for each domain that we want.
The configuration file responsible for this is httpd-vhosts.conf
. In my installation, it is located at /opt/lampp/etc/extra/httpd-vhosts.conf
Now, let’s open it with the gedit editor or whichever editor we want:
sudo gedit /opt/lampp/etc/extra/httpd-vhosts.conf
We’ll enter our password and begin editing as follows:
<VirtualHost *:80>
ServerAdmin sarah@masika.com
DocumentRoot "/opt/lampp/htdocs/time-tracker"
ServerName local.tracker.com
ServerAlias www.local.tracker.com
ErrorLog "logs/tracker.com-error_log"
CustomLog "logs/tracker.com-access_log" common
</VirtualHost>
In the DocumentRoot
directive, we’ll specify where our project is located. ServerName
and ServerAlias
are the domain names we want the server to respond to. So, in our case, the server will respond to http://local.tracker.com
or www.local.tracker.com
.
Step 2: Register the new virtual hostname
This must be done in the hosts
file. In Debian GNU/Linux, it is located at /etc/hosts
:
sudo nano /etc/hosts
We’ll enter our password if asked the following:
127.0.0.1 local.tracker.com
We’ll save the file (Ctrl + X
and Y
):
Step 3: Enable virtual host configuration
By default, the virtual host is disabled in httpd.conf
. We’ll open it to allow virtual hosts:
sudo nano /opt/lampp/etc/httpd.conf
We’ll do a search to quickly find the virtual hosts
line (ctrl + W
and write Include etc
). We’ll uncomment (delete the #
sign before the line) this line:
Include etc/extra/httpd-vhosts.conf
We can now restart our server:
sudo /opt/lampp/lampp restart
We can now access our site at local.tracker.com
.
Wrap up
Virtual hosting is a technique used to allow one web server to host more than one domain. The name-based virtual hosting type is the most popular.
We can create a virtual host on Debian GNU/Linux following these three steps:
- Create a new virtual host in the
httpd-vhosts.conf
file. - Register it in
hosts
. - Enable the virtual host in
httpd.conf
.
Get hands-on with 1200+ tech skills courses.