How to Set Up Apache Virtual Hosts on CentOS 8

Posted 

4 min read

Apache Virtual Hosts allows you to run more than one website on a single machine. With Virtual Hosts, you can specify the site document root (the directory containing the website files), create a separate security policy for each site, use different SSL certificates, and much more.

This article explains how to set up Apache Virtual Hosts on a CentOS 8 server.

Prerequisites

Ensure that you have met the following requirements before continuing with this tutorial:

Creating Directory Structure

The document root is the directory in which the website files for a domain name are stored and served in response to requests. The document root can be set to any location you want.

We will use the following directory structure:

/var/www/
├── example.com
│   └── public_html
├── example2.com
│   └── public_html
├── example3.com
│   └── public_html

For each domain that will be hosted on the server, we’ll create a separate directory inside /var/www. Within the domain directory, we’ll create a public_html directory that will be the domain document root directory and will store the domain website files.

Let’s start by creating the root directory for the domain example.com:

sudo mkdir -p /var/www/example.com/public_html

For testing purposes, create an index.html file inside the domain’s document root directory:

sudo nano /var/www/example.com/public_html/index.html

Copy and paste the following code into the file:

/var/www/example.com/public_html/index.html
<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Welcome to example.com</title>
  </head>
  <body>
    <h1>Success! example.com home page!</h1>
  </body>
</html>

To avoid any permission issues change the ownership of the domain document root directory to user apache:

sudo chown -R apache: /var/www/example.com

Creating Virtual Host File

There are a few ways to set up a virtual host. You can either add all Virtual Host Directives in a single file or create a new configuration file for each Virtual Host Directive. Generally, you should prefer the second approach, which is more maintainable.

By default, Apache is configured to load all configuration files that ends with .conf from the /etc/httpd/conf.d/ directory.

To create a virtual host for a specific website open your editor of choice and create the following basic Virtual Host configuration file:

/etc/httpd/conf.d/example.com.conf
<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    ServerAdmin webmaster@example.com
    DocumentRoot /var/www/example.com/public_html

    <Directory /var/www/example.com/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
    </Directory>

    ErrorLog /var/log/httpd/example.com-error.log
    CustomLog /var/log/httpd/example.com-access.log combined
</VirtualHost>
  • ServerName: Name of the domain for which the virtual host configuration will be used. This is your domain name.
  • ServerAlias: All other domains for which the virtual host configuration will be used as well, such as the www subdomain.
  • DocumentRoot: The directory from which Apache serves the domain files.
  • Options: This directive controls the per-directory server features.
    • -Indexes: Prevents directory listings.
    • FollowSymLinks: This option tells the webserver to follow the symbolic links.
  • AllowOverride: Specifies which directives declared in the .htaccess file can override the configuration directives.
  • ErrorLog, CustomLog: The location od the log files.

Edit the file according to your needs and save it.

The configuration file name must end with .conf. You can name the configuration file as you like. The best practice is to use the domain name as the name of the virtual host configuration file.

Test the configuration file syntax with:

sudo apachectl configtest

If there are no errors, the output should look like this:

Syntax OK

To activate a newly created virtual host, restart the Apache service with:

sudo systemctl restart httpd

Open http://example.com to verify that everything is working as expected.

Conclusion

In this tutorial, we have shown you how to create an Apache virtual host configuration on CentOS 8. You can repeat the steps we outlined above and create additional virtual hosts for all your domains.

If you want to secure your website with an SSL certificate, you can generate and install a free Letsencrypt SSL certificate .

Feel free to leave a comment if you have any questions.

This post is a part of the Install LAMP Stack on CentOS 8 series.
Other posts in this series:

How to Set Up Apache Virtual Hosts on CentOS 8