Setting Up Multiple SSL-Enabled Websites on a Single Apache Server
This guide will walk you through the steps to install Apache, host multiple websites using Virtual Hosts, and enable SSL for secure access using Let’s Encrypt certificates.
Step 1: Install Apache
First, ensure your server’s package index is up-to-date, then install Apache:
sudo apt update
sudo apt install apache2 -y
After the installation completes, start Apache and enable it to start on boot:
sudo systemctl start apache2
sudo systemctl enable apache2
To verify that Apache is running, check its status:
sudo systemctl status apache2
Step 2: Create Directories for Websites
Create separate directories for each website you plan to host:
sudo mkdir -p /var/www/html/site1
sudo mkdir -p /var/www/html/site2
Step 3: Set Ownership and Permissions
Assign the ownership of these directories to your user and set the correct permissions:
sudo chown -R $USER:$USER /var/www/html/site1
sudo chown -R $USER:$USER /var/www/html/site2
sudo chmod -R 755 /var/www/html/
Step 4: Create an Index Page for Each Site
To verify each site’s configuration, add a simple HTML file for each site:
echo "<h1>Welcome to Site 1</h1>" | sudo tee /var/www/html/site1/index.html
echo "<h1>Welcome to Site 2</h1>" | sudo tee /var/www/html/site2/index.html
Step 5: Create Apache Configuration Files for Each Site
Define separate Apache Virtual Hosts for each site by creating configuration files in the sites-available
directory.
Configuration for Site 1
Open a configuration file for Site 1:
sudo vi /etc/apache2/sites-available/site1.conf
Add the following content:
<VirtualHost *:80>
ServerAdmin admin@site1.dineshcloud.in
ServerName site1.dineshcloud.in
DocumentRoot /var/www/html/site1
<Directory /var/www/html/site1>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/site1-error.log
CustomLog ${APACHE_LOG_DIR}/site1-access.log combined
</VirtualHost>
Configuration for Site 2
Similarly, create a configuration file for Site 2:
sudo vi /etc/apache2/sites-available/site2.conf
Add the following configuration:
<VirtualHost *:80>
ServerAdmin admin@site2.dineshcloud.in
ServerName site2.dineshcloud.in
DocumentRoot /var/www/html/site2
<Directory /var/www/html/site2>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/site2-error.log
CustomLog ${APACHE_LOG_DIR}/site2-access.log combined
</VirtualHost>
Step 6: Enable the Sites
Activate each site configuration:
sudo a2ensite site1.conf
sudo a2ensite site2.conf
Step 7: Reload Apache
Reload Apache to apply the new configurations:
sudo systemctl reload apache2
Step 8: Verify the Setup
Visit each site by navigating to the configured domain (e.g., http://site1.dineshcloud.in
and http://site2.dineshcloud.in
). Each domain should display the content from the respective index.html
.
Step 9: Configure SSL with Certbot (Optional)
To secure your sites with HTTPS, use Certbot to generate SSL certificates from Let’s Encrypt.
Install Certbot and the Apache plugin:
sudo apt install certbot python3-certbot-apache
Run Certbot to configure SSL for each domain:
sudo certbot --apache -d site1.dineshcloud.in sudo certbot --apache -d site2.dineshcloud.in
Certbot will automatically handle the SSL setup, allowing you to access each site securely via HTTPS.
Conclusion
By following this guide, you’ve successfully set up multiple websites on a single Apache server, configured Virtual Hosts, and enabled SSL for enhanced security. With Apache and Certbot, hosting multiple sites securely becomes a streamlined process.
Subscribe to my newsletter
Read articles from Dinesh Kumar K directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Dinesh Kumar K
Dinesh Kumar K
Hi there! I'm Dinesh, a passionate Cloud and DevOps enthusiast. I love to dive into the latest new technologies and sharing my journey through blog.