Virtual Hosts
Host: Robert Moonen Date: 29th May, 2009
Setting up Virtual Hosts under Apache.
Make sure that the module you need is available.
So first of all we need to check the directory of available modules to see if we have a copy of module vhosts_alias
ls /etc/apache2/mods-available/
actions.conf
actions.load
alias.conf
alias.load
asis.load
auth_basic.load
auth_digest.load
authn_alias.load
authn_anon.load
authn_dbd.load
authn_dbm.load
authn_default.load
authn_file.load
authnz_ldap.load
authz_dbm.load
authz_default.load
authz_groupfile.load
authz_host.load
authz_owner.load
authz_user.load
autoindex.conf
autoindex.load
cache.load
cern_meta.load
cgi.load
cgid.conf
cgid.load
charset_lite.load
dav.load
dav_fs.conf
dav_fs.load
dav_lock.load
dbd.load
deflate.conf
deflate.load
dir.conf
dir.load
disk_cache.conf
disk_cache.load
dump_io.load
env.load
expires.load
ext_filter.load
file_cache.load
filter.load
headers.load
ident.load
imagemap.load
include.load
info.conf
info.load
ldap.load
log_forensic.load
mem_cache.conf
mem_cache.load
mime.conf
mime.load
mime_magic.conf
mime_magic.load
negotiation.conf
negotiation.load
perl.load
php5.conf
php5.load
proxy.conf
proxy.load
proxy_ajp.load
proxy_balancer.load
proxy_connect.load
proxy_ftp.load
proxy_http.load
python.load
rewrite.load
setenvif.conf
setenvif.load
speling.load
ssl.conf
ssl.load
status.conf
status.load
substitute.load
suexec.load
unique_id.load
userdir.conf
userdir.load
usertrack.load
version.load
vhost_alias.load # this is mod_vhost_alias
Next we need to tell apache2 to load the vhosts_alias module
ls /etc/apache2/mods-enabled/
alias.conf
alias.load
auth_basic.load
authn_file.load
authz_default.load
authz_groupfile.load
authz_host.load
authz_user.load
autoindex.conf
autoindex.load
cgi.load
deflate.conf
deflate.load
dir.conf
dir.load
env.load
mime.conf
mime.load
negotiation.conf
negotiation.load
perl.load
php5.conf
php5.load
python.load
setenvif.conf
setenvif.load
status.conf
status.load
vhost_alias.load # make sure it's enabled
Now we need to setup the enabled sites file to include all the virtual hosts we will be adding.
cat /etc/apache2/sites-enabled/000-default
<VirtualHost *:80> # set the port number here
ServerAdmin webmaster@localhost
DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride AuthConfig
Order allow,deny
allow from all
</Directory>
UseCanonicalName Off #
VirtualDocumentRoot /var/www/%0/ # this is the asked for URL
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 /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/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>
Including VirtualDocumentRoot /var/www/%0/ in the enabled sites file tells apache2 that is is to do directory expansion adding the asked for URL to the normal DocumentRoot directory.
ls -la /var/www
total 24
drwxrwxr-x 5 root robert 4096 May 29 20:33 .
drwxr-xr-x 14 root root 4096 Jan 3 13:29 ..
lrwxrwxrwx 1 root root 25 Jan 19 19:03 172.16.0.104 -> lampp/djelectro/postcode/ # local Virtual host
lrwxrwxrwx 1 root root 22 Jan 19 19:02 ares -> ares.going-places.org/ # local Virtual host
lrwxrwxrwx 1 robert robert 8 May 26 14:09 ares-ext -> external # local Virtual host
drwxr-xr-x 25 robert robert 4096 May 31 14:45 ares.going-places.org # local Virtual host
drwxr-xr-x 5 robert robert 4096 May 31 14:47 external # directory for external access
lrwxrwxrwx 1 robert robert 18 Jan 24 23:29 going-places.dyndns.org -> /var/www/external/ # dyndns Virtual host
lrwxrwxrwx 1 robert robert 34 Jan 24 23:29 going-places.webhop.net -> /var/www/lampp/djelectro/postcode/ # dyndns Virtual host
-rw-r--r-- 1 robert robert 45 Dec 10 00:17 index.html
drwxr-xr-x 7 robert robert 4096 Jan 8 18:39 lampp
lrwxrwxrwx 1 robert robert 17 May 25 21:02 mywebspace.dyndns.org -> /var/www/external # dyndns Virtual host
lrwxrwxrwx 1 robert robert 17 May 26 13:54 pastebin.dyndns.org -> /var/www/external # dyndns Virtual host
lrwxrwxrwx 1 robert robert 18 Feb 3 12:51 www.going-places.dyndns.org -> /var/www/external/ # dyndns Virtual host
lrwxrwxrwx 1 robert robert 34 Feb 3 12:48 www.going-places.webhop.net -> /var/www/lampp/djelectro/postcode/ # dyndns Virtual host
lrwxrwxrwx 1 root root 16 Jan 19 19:04 www.intra.net -> lampp/djelectro/ # local Virtual host
lrwxrwxrwx 1 robert robert 17 May 25 21:02 www.mywebspace.dyndns.org -> /var/www/external # dyndns Virtual host
lrwxrwxrwx 1 robert robert 17 May 26 13:54 www.pastebin.dyndns.org -> /var/www/external # dyndns Virtual host
As you can see, now all you have to do is put links to your directories in URL format and it all "just works". ;)