VirtualHost instellingen Apache2

In dit artikel gaat het over de setup van een VirtualHost met de Apache2 webserver.
Een VirtualHost is een domein naam -zeg maar een website-  en je kunt er meerdere websites tegelijk mee hosten vanaf  1 computer.
Als voorbeeld domeinnaam gebruiken we cellie.homeip.net.
We gaan er van uit dat de Apache2 server al geconfigureerd is.
In het voorbeeld is gebruik gemaakt van Ubuntu -XBMC Live- met Apache2 later geinstalleerd, maar het zou moeten werken op de meeste Ubuntu versies.
De domeinnaam die we gaan configureren moet al resolven naar het ip adres van de server.

In het kort.

Als er geen VirtualHostop de server aanwezig is zal de standaard website zich in /var/www bevinden. Dat is de DocumentRoot van de server. De website die we toevoegen word in een subdirectory van /var/www geplaatst. Die subdirectory geven we dezelfde naam als de website.
Dat is in dit geval dus /var/www/cellie.homeip.net.

In /etc/apache2/sites-available staan de configuratie bestanden van de websites. Hier word dat het tekst bestand /etc/apache2/sites-available/cellie.homeip.net.
Daarna word in /etc/apache2/sites-enabled een link aangemaakt naar het configuratie bestand van de website. Dat kan handmatig of met het commando a2ensite. Pas als dat gebeurd is kan Apache2 de VirtualHost gebruiken.
In dit voorbeeld gebruiken we a2ensite.om de site ‘aan’ te zetten.

Maak de directories.

Als eerste geven we de VirtualHost een eigen directory met daarin de DocumentRoot van de VirtualHost.
De directories maken we aan in /var/www, wat de standaard DocumentRoot van de Apache2 server is.

cellie@XBMCLive:~$ sudo mkdir /var/www/cellie.homeip.net
cellie@XBMCLive:~$ sudo mkdir /var/www/cellie.homeip.net/htdocs

Check /etc/apache2/ports.conf

Kijk dan of de optie NameVirtualHost in /etc/apache2/ports.conf aanwezig is en er geen commentaarteken # voor staat.

#/etc/apache2/ports.conf
...
NameVirtualHost *:80
Listen 80
...

De VirtualHost aanmaken.

Gebruik het bestand /etc/apache2/sites-available/default als voorbeeld voor de VirtualHost.
Verwijder het niet! Het bevat de instellingen van de standaard website.
Standaard wijst het naar /var/www. Deze site word getoond als er een request voor Apache2 komt dat niet voor een geconfigureerde VirtualHost is of als die is uitgeschakeld.
Maak nu het VirtualHost bestand /etc/apache2/sites-available/cellie.homeip.net aan.
Servername is de naam van de website, en DocumentRoot moet in dit voorbeeld naar /var/www/cellie.homeip.net/htdocs wijzen.

#/etc/apache2/sites-available/cellie.homeip.net
<VirtualHost *:80>
    Servername cellie.homeip.net
    DocumentRoot /var/www/cellie.homeip.net/htdocs
    ...
<Directory /var/www/cellie.homeip.net/htdocs>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
</Directory>

<Directory /var/www/cellie.homeip.net/htdocs/geheim>
    AuthUserFile /home/cellie/.htpasswd
    AuthType Basic
    AuthName "Alleen toegang voor de baas."
    Require valid-user
</Directory>
    ...
</VirtualHost>

Hier is de directory /var/www/cellie.homeip.net/htdocs/geheim met een wachtwoord beveiligd dat in /home/cellie/.htpasswd is opgeslagen.
De VirtualHost is nu geconfigureerd, maar nog niet beschikbaar voor Apache2.

De VirtualHost aan Apache2 toevoegen.

Met het commando a2ensite kun je nu de site aan Apache toevoegen.
Er word door a2ensite een symlink in /etc/apache2/sites-enabled aangemaakt naar een website in /etc/apache2/sites-available.
Om de VirtualHost cellie.homeip.net in te schakelen gebruiken we:

cellie@XBMCLive:~$ sudo a2ensite cellie.homeip.net
Enabling site cellie.homeip.net.
Run '/etc/init.d/apache2 reload' to activate new configuration!

Dan lezen we braaf de Apache2 configuratie opnieuw in met:

cellie@XBMCLive:~$ sudo /etc/init.d/apache2 reload

Nu is de site vanaf het internet met de domeinnaam cellie.homeip.net bereikbaar.

De VirtualHost uit Apache2 verwijderen.

Het commando a2dissite dient om de link weer te verwijderen.
De VirtualHost is dan onbereikbaar en de standaard website die in /etc/apache2/sites-available/default is gedefinieerd word getoond.

cellie@XBMCLive:~$ sudo a2dissite cellie.homeip.net
Site cellie.homeip.net disabled.
Run '/etc/init.d/apache2 reload' to activate new configuration!

Ook nu weer de Apache2 configuratie opnieuw inlezen!
De domeinnaam wijst daarna naar de default website. In dit geval /var/www.
De VirtualHost cellie.homeip.net is nu niet bereikbaar.

a2ensite en a2dissite kun je ook zonder domeinnaam aanroepen, dan worden de aanwezige domeinnamen getoond.

Apache2 log splitsen per VirtualHost.

Op een Apache2 server die meerdere domein namen host kunnen we de logs opsplitsen naar hostnaam.
Zie dit artikel
om meerdere hosts met Apache2 in te stellen.

Om de log files te spitsen gebruiken we de directive CustomLog in het configuratiebestand van de VirtualHost dat in /etc/apache2/sites-available aanwezig is. In dit voorbeeld gaan we uit van de website cellie.homeip.net.
Let op, er staat /usr/sbin/rotatelogs en niet /usr/sbin/logrotate!

#/etc/apache2/sites-available/cellie.homeip.net
<VirtualHost *:80>
    Servername cellie.homeip.net
    ...
    CustomLog "|/usr/sbin/rotatelogs /var/log/apache2/cellie.homeip.net_access_%d-%m-%Y 86400" vhost_combined
    ErrorLog  "|/usr/sbin/rotatelogs /var/log/apache2/cellie.homeip.net_error_%d-%m-%Y 86400"
</VirtualHost>

Er word voor deze host nu eens per dag -86400s- een logfile in /var/log/apache2 aangemaakt, met de hostname en daarachter de dag van de maand , de maand, en het jaar als bestandsnaam. Een zelfde constructie is mogelijk met het ErrorLog directive. Uit het voorbeeld zullen de volgende bestandsnamen komen:

cellie.homeip.net_access_01-02-2010
cellie.homeip.net_error_01-02-2010

De VirtualHost cellie.homeip.net heeft nu zijn eigen logfiles met de datum en tijd in de bestandsnaam.
Lees de security tips als er meerdere gebruikers toegang hebben tot de server.

De informatie komt van de behoorlijk cryptische handleidingen:
Apache2 rotatelogs manual
Apache2 CustomLog manual
Apache2 ErrorLog manual