Volwassen open source software
Apache is nog steeds de meest gebruikte webserver ter wereld. Het is dan ook een van de meest volwassen open source pakketten. Dat blijkt bijvoorbeeld niet alleen uit de modulaire opbouw ervan en de prestaties, maar ook uit de ondersteuning voor multi-threading en virtualisatie.
Hoewel Apache en Microsoft de afgelopen jaren dichter naar elkaar toe zijn gekropen, is Apache nog steeds de meest gebruikte webserver ter wereld. Volgens Netcraft heeft het open source pakket op dit moment iets meer dan de helft van de markt in handen. Tel je de Google webserver mee, die ook op Apache is gebaseerd, dan kom je op ongeveer 60 procent uit. Microsoft blijft met zijn Internet Information Services (IIS, voorheen Internet Information Server) ruim onder de veertig procent zitten.
Afgezien van de kwaliteit van Apache, is het feit dat de HTTP server standaard met Linux en andere Unix operating systems wordt meegeleverd, natuurlijk een belangrijke factor in dit succes. De opkomst van Linux heeft immers plaatsgevonden vanuit de infrastructuur-toepassingen. Daarnaast is het LAMP ontwikkel-platform voor webportals gebaseerd op Linux met Apache, MySQL en Perl/PHP/Python de laatste jaren een begrip geworden. In tegenstelling tot IIS dat alleen voor het Windows-platform beschikbaar is, loopt Apache naast Unix ook op Windows, NetWare en Mac OS X (= BSD Unix). Bovendien is Apache een onderdeel van de Oracle en WebSphere applicatie-servers.
Modulair
De installatie van Apache die met de laatste versie van Red Hat Enterprise Linux (RHEL) wordt meegeleverd, bestaat uit de basis server met daarbij enige tientallen losse componenten. De HTTP server is namelijk volledig modulair opgebouwd. Bovendien zijn al die onderdelen nog eens op allerlei mogelijke manieren te configureren.
Naast de componenten die je standaard gebruikt en de modulen die specifiek door je web-applicatie worden gevraagd, zijn mod_deflate en mod_rewrite nog de moeite waard om apart te noemen. De eerste kun je gebruiken om je web-verkeer te comprimeren. De configuratie ervan is een fluitje van een cent, en de opbrengsten enorm. Want hoewel plaatjes niet goed comprimeren, geldt dat wel voor files met HTML, XML, CSS code en JavaScript. Op die manier kun je je verkeer vaak meer dan halveren. Heb je een applicatie die niet netwerk- maar processor-intensief is, dan kun je deze module natuurlijk beter niet gebruiken.
Mod_rewrite is interessant omdat je met behulp van reguliere expressies hele ingewikkelde herschrijvingen van je URL's kunt doen. Zo kun je complexe URL's met veel parameters voor de bezoekers terugvertalen naar veel eenvoudiger adressen. Bovendien kun je op die manier je URL's beter toesnijden op formaten die door zoekmachines hoger worden gewaardeerd. Klein minpuntje daarbij is dat het aantal backreferences beperkt is tot tien. Dat maakt het lastig om URL's met veel parameters te vervangen door URL's met diepe paden.
Prestaties
Behalve de standaard componenten die door de Apache Foundation zelf bij de HTTP server worden meegeleverd, voorziet de Linux-distributie onder andere in de PHP module. We hebben daar zelf nog eAccelerator (voorheen Turck MMCache) bij geïnstalleerd. Deze versneller zorgt dat de al gecompileerde PHP-bestanden in het geheugen bewaard blijven, zodat dynamische pagina's veel sneller beschikbaar zijn en minder processorkracht vragen. Door ook de MySQL queries op een slimme manier te cachen (on-demand caching) kunnen de prestaties nog verder worden verbeterd. Andere handige modulen die we gebruiken, zijn mod_guard, mod_evasive20 en GeoIP.
Overigens laten de prestaties van Apache niets te wensen over. De kern van de HTTP server kan met verschillende multi-threading modellen overweg, afhankelijk van toepassing en platform. Tegenwoordig spreekt men in dit verband van horizontaal schaalbare applicaties. Door een cluster van Apache-systemen te combineren met meerdere DNS adressen, een load balancing configuratie met session affinity, en meerdere gerepliceerde database-servers in het back-end, kunnen nog veel zwaardere websites worden gebouwd.
Virtualisatie
In dit verband is het ook goed om de ondersteuning voor virtuele webservers te noemen. Op een handvol brede instellingen na kunnen alle configuraties apart worden ingesteld voor verschillende websites die op dezelfde HTTP server draaien. Nu server-virtualisatie zo in de belangstelling staat, zou je haast vergeten dat voor sommige toepassingen al goede oplossingen bestaan. Afhankelijk van de belasting kun je tientallen websites laten draaien op één enkele server. Dat is veel efficiënter dan een gevirtualiseerde oplossing waarbij het hele operating system steeds weer opnieuw wordt gecopieerd en in het geheugen moet worden geladen. Overigens lukt dit niet met beveiligde webservers. SSL-servers (https) hebben elk een eigen IP-adres nodig.
Voor het opzetten van virtuele webservers is het wel eerst nodig om de suexec module die met Red Hat distributies (RHEL, CentOS en Fedora) wordt meegeleverd opnieuw te compileren. Deze is nu zo geconfigureerd dat CGI-folders alleen onder de directory /var/www/cgi-bin/ kunnen bestaan. Wil je meerdere virtuele servers naast elkaar draaien of CGI-toepassingen in de /usr/local/ hierarchie kunnen installeren, dan zul je op zijn minst deze module opnieuw moeten compileren. Wij hebben dat gedaan door de source RPM van Apache binnen te halen en de .spec file aan te passen (--suexec-docroot=/). Na de rpmbuild-opdracht hoeven we alleen de module uit de binaire RPM te vissen (cpio) en op de juiste plaats te zetten.
Ter vergelijking nog iets over de ervaringen met MMBase, een Java-gebaseerd open source CMS (Content Management Systeem) dat tot een paar jaar geleden in Nederland in bepaalde kringen wel populair was. Deze bleek tot wel twintig keer zo veel resources nodig te hebben als een LAMP-gebaseerde website, en dat terwijl deze sites ook in een gedeelde Tomcat-omgeving draaiden.
Nederlands (nl-NL)
English (United Kingdom) 
Plaats reactie