Skip to main content



How to Configure Apache Virtual Hosts

How to Configure Apache Virtual Hosts

If you are running a web server and need to host multiple websites on a single machine, Apache virtual hosts are the solution you have been looking for. Whether you are a seasoned system administrator or a developer just getting started with server management, understanding how to configure Apache virtual hosts is an essential skill. In this guide, we will walk you through everything you need to know, from the basic concepts to the practical steps involved in setting up and managing virtual hosts on your Apache web server.

What Are Apache Virtual Hosts?

Apache virtual hosts allow a single Apache HTTP Server installation to serve multiple websites or web applications simultaneously. Instead of requiring a separate server for each domain, virtual hosts let you partition a single server into multiple logical servers, each responding to different domain names or IP addresses.

There are two primary types of Apache virtual hosts:

Name-Based Virtual Hosts

Name-based virtual hosting is the most commonly used method. It allows multiple domain names to share the same IP address. When a request arrives at the server, Apache examines the Host header sent by the browser to determine which virtual host should handle the request. This approach is cost-effective and straightforward, making it the preferred choice for most hosting environments.

IP-Based Virtual Hosts

IP-based virtual hosting assigns a unique IP address to each website hosted on the server. Apache then routes incoming requests to the appropriate virtual host based on the IP address. This method is less common today due to the limited availability of IPv4 addresses, but it may still be required for certain SSL/TLS configurations or legacy applications.

Prerequisites Before You Begin

Before configuring Apache virtual hosts, ensure the following requirements are met:

  • Apache HTTP Server is installed on your system (version 2.4 or later is recommended)
  • You have root or sudo access to the server
  • Your domain names are pointed to your server’s IP address via DNS records
  • A basic understanding of the Linux command line

If you are new to server management and looking for additional resources, the da-manager.com blog offers a wealth of practical guides and tutorials on web hosting and server administration.

Step-by-Step Guide to Configuring Apache Virtual Hosts

Step 1: Create the Directory Structure

The first step is to create a directory for each website you intend to host. A common convention is to store website files under /var/www/. For example, if you are hosting two sites — example.co.uk and anothersite.co.uk — you would create the following directories:

sudo mkdir -p /var/www/example.co.uk/public_html
sudo mkdir -p /var/www/anothersite.co.uk/public_html

Next, set the appropriate ownership and permissions so that Apache can read the files:

sudo chown -R www-data:www-data /var/www/example.co.uk/public_html
sudo chown -R www-data:www-data /var/www/anothersite.co.uk/public_html
sudo chmod -R 755 /var/www

Step 2: Create Sample HTML Pages

Create a simple index page for each site to test that the configuration is working correctly:

echo "<h1>Welcome to Example.co.uk</h1>" | sudo tee /var/www/example.co.uk/public_html/index.html
echo "<h1>Welcome to AnotherSite.co.uk</h1>" | sudo tee /var/www/anothersite.co.uk/public_html/index.html

Step 3: Create Virtual Host Configuration Files

On Debian and Ubuntu-based systems, Apache virtual host configuration files are stored in /etc/apache2/sites-available/. Create a new configuration file for each domain:

sudo nano /etc/apache2/sites-available/example.co.uk.conf

Add the following configuration to the file:

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName example.co.uk
    ServerAlias www.example.co.uk
    DocumentRoot /var/www/example.co.uk/public_html
    ErrorLog ${APACHE_LOG_DIR}/example.co.uk_error.log
    CustomLog ${APACHE_LOG_DIR}/example.co.uk_access.log combined
</VirtualHost>

Repeat this process for your second domain, adjusting the values accordingly.

Step 4: Enable the Virtual Hosts

Once your configuration files are in place, use the a2ensite command to enable them:

sudo a2ensite example.co.uk.conf
sudo a2ensite anothersite.co.uk.conf

If the default Apache configuration is active and you no longer need it, you can disable it with:

sudo a2dissite 000-default.conf

Step 5: Test and Reload Apache

Before reloading Apache, always test your configuration for syntax errors:

sudo apache2ctl configtest

If the output shows Syntax OK, you can safely reload Apache:

sudo systemctl reload apache2

Configuring Apache Virtual Hosts on Red Hat-Based Systems

On CentOS, AlmaLinux, or Red Hat Enterprise Linux, the process differs slightly. Configuration files are typically placed in /etc/httpd/conf.d/, and the service is managed using httpd rather than apache2. The virtual host block syntax remains the same, but you would reload the service with:

sudo systemctl reload httpd

Additionally, if SELinux is enabled on your system, you may need to adjust the security context of your web directories to allow Apache to serve the files correctly.

Enabling SSL for Apache Virtual Hosts

Securing your virtual hosts with SSL/TLS is strongly recommended. The easiest way to achieve this on most Linux distributions is by using Let’s Encrypt with the Certbot tool. Once installed, you can obtain and configure a free SSL certificate with a single command:

sudo certbot --apache -d example.co.uk -d www.example.co.uk

Certbot will automatically modify your virtual host configuration to include the necessary SSL directives and redirect HTTP traffic to HTTPS. This ensures that all data transmitted between your server and visitors is encrypted and secure.

Troubleshooting Common Issues

Apache Not Serving the Correct Site

If Apache is serving the wrong site, double-check the ServerName and ServerAlias directives in your configuration files. Ensure that your DNS records are correctly pointing to your server’s IP address, and verify that no conflicting virtual host configurations exist.

Permission Denied Errors

Permission errors are often caused by incorrect file ownership or permissions. Revisit your chown and chmod settings and ensure that the www-data (or apache on Red Hat systems) user has read access to your document root directories.

Port 80 or 443 Not Listening

Ensure that Apache is configured to listen on the correct ports by checking the /etc/apache2/ports.conf file. You should see Listen 80 and, if SSL is enabled, Listen 443.

Final Thoughts

Configuring Apache virtual hosts is a fundamental aspect of managing a web server efficiently. By hosting multiple websites on a single machine, you can make the most of your server resources whilst keeping your infrastructure simple and cost-effective. Whether you are setting up a development environment, managing a small business website, or running a large-scale hosting platform, mastering Apache virtual hosts will serve you well throughout your career in web administration.

With the steps outlined in this guide, you should now have a solid foundation for creating, enabling, and troubleshooting Apache virtual hosts. As you grow more confident, you can explore advanced configurations such as custom logging, access control, URL rewriting, and load balancing to further enhance your server setup.