Host multiple domains on one server with Apache


2012-09-20

Apache allows you to host multiple domain names from a single IP address using Virtual Hosts. I'll show you how to edit Apaches sites-enabled file to do this. First, open the 000-default file in /etc/apache2/sites-enabled/. It should look like this:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

We will want to add the following section to the bottom:

<VirtualHost *:80>
DocumentRoot /var/www/directoryWithSiteFiles
ServerName domainname.com
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
<Directory /var/www/directoryWithSiteFiles>
    Options Indexes FollowSymLinks MultiViews ExecCGI Includes
    AllowOverride None
                Order allow,deny
                Allow from all
        </Directory>
# Other directives here
</VirtualHost>

replacing domain.com with your domain name and directoryWithSiteFiles with the directory that holds the files you want hosted at that domain. Notice that this is for the naked domain domain.com. To also host www.domain.com, you will need another section added on like this:

<VirtualHost *:80>
DocumentRoot /var/www/directoryWithSiteFiles
ServerName www.domainname.com
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
<Directory /var/www/directoryWithSiteFiles>
    Options Indexes FollowSymLinks MultiViews ExecCGI Includes
    AllowOverride None
                Order allow,deny
                Allow from all
        </Directory>
# Other directives here
</VirtualHost>

You can do this for multiple sites (I have three on my server right now). Remember: you will have to change your DNS server to point to the IP of this server, as well.