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

Wachtwoord op een website zonder .htaccess

We hebben het in dit voorbeeld over een Virtual Host cellie.homeip.net met als root van de site /var/www/cellie.homeip.net/htdocs/ op een Ubuntu Apache2 webserver.

Om bijvoorbeeld de directory /var/www/cellie.homeip.net/htdocs/geheim met een wachtwoord te beveiligen, kopieer je het volgende naar /etc/apache2/sites-enabled/cellie.homeip.net

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

Maak het bijbehorende .htpasswd bestand in /home/cellie aan met:

htpasswd /home/cellie/.htpasswd cellie

Je moet nu twee keer het nieuwe wachtwoord  van de gebruiker invoeren, daarna word de gebruiker toegevoegd. Als het bestand nog niet bestaat zal htpasswd dat melden, gebruik dan de -c (create) optie:

htpasswd -c /home/cellie/.htpasswd gebruiker

Vergeet niet Apache2 opnieuw te starten.

Wachtwoord op een website

Als je Apache gebruikt als webserver kun je de website of een folder daarop alleen toegankelijk te maken voor bepaalde gebruikers met behulp van een .htaccess bestand en htpasswd.
De site of folder is dan alleen toegankelijk voor gebruikers met het juiste wachtwoord.

Voeg het volgende toe aan het .htaccess bestand in de folder die je wil beveiligen. Maak het bestand aan als het niet bestaat. Vergeet niet de punt voor de naam htaccess. Deze zorgt ervoor dat het een verborgen bestand is. Let hierop in een FTP client.

AuthUserFile /var/.wachtwoord
AuthType Basic
AuthName "My Secret Folder"
Require valid-user

Dit .htaccess bestand kijkt in het bestand /var/.wachtwoord om te bepalen wie er mag inloggen.
Let erop dat het bestand .wachtwoord boven de root van de webserver opgeslagen word!
Is de root van de webserver /var/www, sla dan het bestand niet op in /var/www of een lagere folder maar in /var of de lokale gebruiker folder.
Zo is het bestand wel te lezen door Apache maar onbereikbaar vanaf het internet.

Wil je een gebruiker toevoegen dan gebruik je htpasswd:

htpasswd /var/.wachtwoord gebruiker

Je moet nu twee keer het nieuwe wachtwoord  van de gebruiker invoeren, dan word de gebruiker toegevoegd. Als het bestand nog niet bestaat zal htpasswd dat melden, gebruik dan de -c optie:

htpasswd -c /var/.wachtwoord gebruiker

De -c optie staat voor ‘create’. Het bestand word dan automatisch aangemaakt.
Je kunt natuurlijk een andere naam dan .wachtwoord aan het bestand geven.
Pas dit dan ook aan in het .htaccess bestand.

WordPress installatie database error

Als de lokale MySql server bij de installatie van WordPress blijft reageren met Error establishing a database connection en je weet zeker dat de database server online is en de inlog gegevens heb je al vijf keer gecontroleerd, dan kan het zijn dat de naam van de database host moet worden veranderd van localhost naar 127.0.0.1.

Het gaat om deze foutmelding bij de installatie:

Kom je die tegen en draait de MySql server wel op localhost dan kun je een venster terug gaan en

veranderen in:

Goede kans dat je nu wel kunt installeren.
Dat halve uur op zoek naar wtf er aan de hand was, dat ben je kwijt.

Website verhuizen – bezoekers doorsturen

De redelijk goede manier van  bezoekers doorsturen is door middel van de redirect optie in het .htaccess bestand. Zo kun je alle verkeer van je oude site doorsturen naar de root van je nieuwe site met de volgende regel:

Redirect 301 / http://www.nieuwesite.nl/

Je kunt individuele bestanden redirecten met bijvoorbeeld:

Redirect 301 /voorbeeld.php http://wasietsmet.nl/voorbeeld.php

Cellie gebruikt de volgende regel om het verkeer te redirecten:

Redirect 301 /index.php http://wasietsmet.nl/
Redirect 301 /index.html http://wasietsmet.nl/

Zo worden requests voor bestanden in de root van cellie.homeip.net doorgestuurd naar wasietsmet.nl terwijl de directories nog wel op cellie.homeip.net te bereiken zijn.