Creating a Virtualhost for Apache 2.X

Overview

Name-based virtual hosting allows for hosting multiple websites with different domains and subdomains on a single server. To configure a web server for name-based virtual hosting, you will need to add a virtualhost configuration and for this example I am using Apache2. This tutorial was tested against Debian 6 Squeeze, but should be applicable for most linux operating systems. For this example we will use the nano as a command line editor, but you could use vi, gedit, or any other preferred editor. Also for the example, I will use sub.example.com as a placeholder, which will need to be modified to reflect the domain name or subdomain that you intend to use for your virtualhost. The domain chosen in the example is for a subdomain, but by simply dropping the prefix of “sub.” the virtualhost will instead then be valid for the primary domain of “example.com”.

Configuring Apache

Step 1

We will need to create a virtualhost configuration for Apache, which is done by simply creating a file with the proper lines and enabling it once it is saved in the proper location. The default location for Apache2 on Debian based operating systems is /etc/apache2/ so the first thing we will need to do is to navigate to this folder.

Step 2

From within the sites-available folder you can begin by creating a new file with a name that reflects the domain name or subdomain for which you’re virtualhost is intended.

Step 3

This will open nano where you can then enter/copy the below configuration.

<VirtualHost *:80>
    ServerAdmin webmaster@sub.example.com
    ServerName sub.example.com
    ServerAlias sub.example.com
    DocumentRoot /srv/www/sub.example.com/public_html/
    ErrorLog /srv/www/sub.example.com/logs/error.log
    CustomLog /srv/www/sub.example.com/logs/access.log combined
</VirtualHost>

Step 4

Once your virtualhost configuration file has been saved, we can enable it by entering:

$ sudo a2ensite sub.example.com

Step 5

Once the site is enabled we can refresh Apache configuration by using the below command:

$ sudo /etc/init.d/apache2 reload

This will rescan and load any new configurations that have been added or modified for Apache; in our case it will load the new configuration for the virtualhost. Once the new Virtualhost has been configured and enabled, Apache will then recognize that it is hosting a new site called sub.example.com.

Debugging

If you make modifications or add any additional virtualhost configurations you will need to repeat Step 6 for each time in order to update the configuration to reflect any new changes.

Other References

About the author

Will works as a technical lead for Kanopi Studios and provides Drupal support for a wide range of amazing projects. He current resides in South Carolina along with his wife, son and two dogs. When not working on tech projects, Will enjoys spending time with family and photographing the stars.