Setting up Apache Vhosts on AWS Linux

If you plan to host multiple sites on a single AWS instance and you are using Apache, this is the guide for you!

1) Navigate to your instance’s Apache configuration directory:

[ec2-user@ip-999-99-99-99 ~]$ cd /etc/httpd/conf.d

2) Create a vhosts config file:

[ec2-user@ip-999-99-99-99 ~]$ sudo nano vhosts.conf

3) Supply some <VirtualHost> directives to point to the document root of each of your sites.


<VirtualHost *:80>

  # The name your website should respond to

  ServerName foo.com
  
  # Tell Apache where your document root is
  
  DocumentRoot /var/www/html/foo.com

  # Add this line if you are allowing .htaccess overrides.
  
  <Directory /var/www/html/foo.com>
    AllowOverride All
  </Directory>

</VirtualHost>

<VirtualHost *:80>

  # The name your website should respond to

  ServerName bar.com
  
  # Tell Apache where your document root is
  
  DocumentRoot /var/www/html/bar.com

  # Add this line if you are allowing .htaccess overrides.
  
  <Directory /var/www/html/bar.com>
    AllowOverride All
  </Directory>

</VirtualHost>

4) Restart Apache for the changes to take effect:

[ec2-user@ip-999-99-99-99 conf.d]$ sudo service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
[ec2-user@ip-999-99-99-99 conf.d]$ 

5) Test your changes:

If you don’t have your site files in place yet, you can do a simple page to test and make sure apache is listening.

[ec2-user@ip-999-99-99-99 conf.d]$ echo '<h1>Hello World</h1>' > /var/www/html/foo.com/index.html

Then on your local machine, add the server’s public IP address to your hosts file with the new domain you setup:

Tims-MacBook-Pro:~ tim$ sudo nano /etc/hosts
* added to the end of the file *
999.99.99.99    foo.com

6) If everything went smoothly you should see your test file run when you hit the domain you setup from a browser!
foo test file