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:
- Domain name pointing to your public server IP.
- Apache installed on your CentOS system.
- You are logged in as root or user with sudo privileges.
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 [email protected]
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 thewww
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.