AWS EC2: How To Set Up Apache Virtual Hosts on CentOS 7

Are you looking for a way to host multiple sites on your AWS EC2 instance? Well it is possible, after all it is still apache that is running on the server. Below is a quick step i used to have two of my applications running on my AWS EC2 micro server.

Before you Start!

Before you begin with this guide, there are a few steps that need to be completed first. link

You will need access to a CentOS 7 server with a non-root user that has sudo privileges.

You will also need to have Apache installed in order to configure virtual hosts for it. If you haven’t already done so, you can use yum to install Apache through CentOS’s default software repositories:

sudo yum -y install httpd
sudo systemctl enable httpd.service

After these steps are complete, log in as your non-root user account through SSH and continue with the tutorial.

Note: The example configuration in this guide will make one virtual host for website1.com and another forwebsite2.com. We will be using these 2 throughout the guide, but you should substitute your own domains or values while following along or after you test that it works with this example.

Step 1: Create your new website directory

sudo mkdir -p /var/www/website1.com/public_html
sudo mkdir -p /var/www/website12.com/public_html

Step 2: Grant permissions to the logged in User

sudo chown -R $USER:$USER /var/www/website1.com/public_html
sudo chown -R $USER:$USER /var/www/website12.com/public_html
sudo chmod -R 755 /var/www

Step 3: Create pages inside your Virtual Host

vi /var/www/website1.com/public_html/index.html

Create test html content (this is just a test)

<html>
<h1>Success! The website1.com virtual host is working!</h1>
</html>

Repeat Create Step 3 for all your new Virtual Hosts

Step 4: Create New Virtual Host Config Files

sudo mkdir /etc/httpd/sites-available
sudo mkdir /etc/httpd/sites-enabled

Open /etc/httpd/conf/httpd.conf and add below to the end of the file

IncludeOptional sites-enabled/*.conf

Create the First Virtual Host File

sudo vi /etc/httpd/sites-available/website1.com.conf

<VirtualHost *:80>
    ServerName www.website1.com
    ServerAlias website1.com
    DocumentRoot /var/www/website1.com/public_html
    ErrorLog /var/www/website1.com/error.log
    CustomLog /var/www/website1.com/requests.log combined
</VirtualHost>

Copy First Virtual Host and Customize for Additional Domains

Step 5: Enable the New Virtual Host Files

Now that we have created our virtual host files, we need to enable them so that Apache knows to serve them to visitors

sudo ln -s /etc/httpd/sites-available/website1.com.conf /etc/httpd/sites-enabled/website1.com.conf

Repeat same for all new virtual domains

When you are finished, restart Apache to make these changes take effect:

sudo apachectl restart

Check your domain now: www.website1.com, you should be good.

Note: If you have .htaccess in your applications, you can eithier use your rewrite/mod rules within each virtual host config or you can check your

/etc/httpd/conf/httpd.conf

Update AllowOverride None to AllowOverride All

 

If it works, let me know …cheers