Virtualhost(s) instellen in Apache

Met virtualhosts is het mogelijk om meerdere websites op een enkele webserver te draaien. De vele shared hosting aanbieders maken dan ook graag gebruik van deze virtualhosts. Er maken dan meerdere klanten gebruik van één fysieke server, waardoor de kosten beperkt blijven. Voor kleine en gemiddelde websites is dat een prima oplossing.

Echter geldt vaak wel: hoe goedkoper de host, hoe groter de kans is dat er (erg) veel hosts op een server zitten. Aangezien de resources (cpu en geheugen) dan gedeeld worden, is de hoeveelheid van hosts op een server niet alleen bepalend voor de prijs, maar ook voor de performance.

Apache ondersteund een onbeperkt aantal virtualhosts, echter indien deze allemaal een eigen log file hebben, treed er bij een aantal boven de 64 een probleem op met de File Descriptor Limits. Deze is gelukkig te omzeilen met behulp van deze Apache guide.

Aangezien ik de omgeving van een site op de devserver zo gelijk mogelijk wil houden, heb ik deze ingesteld als virtualhost. Hoe dat moet is hieronder te lezen.

Apache en virtualhosts

In /etc/apache2/apache2.conf is de volgende regel te vinden:

# Include the virtual host configurations:
Include sites-enabled/

Dat betekent dat de configuratie files voor virtualhosts in /etc/apache2/sites-enabled/ staan. Echter zijn de bestanden die daar te vinden zijn, allemaal symlinks:

$ ls -l /etc/apache2/sites-enabled/
lrwxrwxrwx 1 root root 28 2011-08-23 14:54 dvdheiden -> ../sites-available/dvdheiden

Apache slaat namelijk alle beschikbare hosts op in /etc/apache2/sites-available//etc/apache2/sites-enabled/ een symlink gemaakt naar de file in sites-available.

Configureren virtualhost

Het configureren van een virtualhost bestaat slechts uit het aanmaken van een config file in de sites-available directory. Hieronder staat een template voor de config file welke redelijk zichzelf verklaard, vervang hierbij [host] door het domein (zonder www maar met extensie) en pas eventueel de directories aan.

# [* (all) or specific ip-adres]:[port]
<VirtualHost *:80>
        ServerAdmin [email-adres]
        ServerName www.[host]
        ServerAlias [host], *.[host], [host_zonder_extensie]

        DocumentRoot /srv/vhosts/[host]/www

        ErrorLog /srv/vhosts/[host]/logs/error.log
        CustomLog /srv/vhosts/[host[/logs/access.log common

        <Directory /srv/vhosts/[host]/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        # allow cgi scripts to run
        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>

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

(De)Activeren virtualhost

Activeren of deactiveren gaat vrij eenvoudig onder debian gebaseerde systemen (Debian, Ubuntu, Linux Mint, etc.). Bij de niet-debian gebaseerde systemen dien je de symlink zelf te maken of de config file te verplaatsen.

activeren

sudo a2ensite dvdheiden

deactiveren

sudo a2dissite dvdheiden

De naam die je hier opgeeft komt overeen met de naam van het bestand in /etc/apache2/sites-available/.

Vervolgens moet Apache worden herladen:

sudo /etc/init.d/apache2 reload

Virtualhosts op de devserver

De virtualhosts wil ik zowel lokaal als online eenvoudig kunnen bereiken.

Lokaal
Om op de pc’s die in het netwerk zitten met de devserver de domeinen te laten openen heb dien je de host file aan te passen (/etc/hosts of %windows%/system32/drivers/etc/hosts). Voer hieraan toe:

[ip_server]    [host]

Voorbeeld:

10.0.1.1    dvdheiden

Nu is het mogelijk om in je browser naar het adres http://dvdheiden/ te gaan. Dit levert dan de site lokaal op.

Online
Via het internet kan dat natuurlijk niet. Om de devserver toch te kunnen bereiken heb ik hier een domein voor geregistreerd. Hier staat verder geen website op en heb dus gewoon de default configuratie naar een lege /var/www/ directory laten staan.

Om nu bij de virtualhosts te kunnen heb ik in /var/www/ een directory domains gemaakt. Hierin maak je vervolgens symlinks naar de www mappen van de virtualhosts:

mkdir /var/www/domains
ln -s /srv/dvdheiden.nl/www dvdheiden

In je browser is nu het adres http://devdomein.tld/domains/dvdheiden/ op te vragen.

Leave a Reply

Your email address will not be published. Required fields are marked *