Windows Server 2008 en IIS 7.0: een Gouden Koppel?
Sinds enige tijd is Windows Server 2008 beschikbaar voor iedereen en nu komt de belangrijkste vraag: wat verandert dit aan de manier van werken die ik tot nu toe gevolgd heb. In hoeverre zijn de veranderingen verbeteringen voor mij? Aangezien Windows Server 2008 een zeer uitgebreid geheel is, is het niet mogelijk en wenselijk om alles in één artikel te bespreken. In dit artikel zullen we ons beperken tot de veranderde web server functionaliteit.
“Windows Server 2008 is secure by default”
Als eerste springt een aantal zaken in het oog als men de white papers leest en de eerst keer met WS2008 aan de slag gaat. Na installatie staat er een compleet kaal systeem, waar geen enkele server functionaliteit op te vinden is. Alle zaken, die een server zinvol maken, moeten toegevoegd worden na installatie. Een keuze die natuurlijk te maken heeft met de uitspraak, dat “WS2008 secure by default” genoemd wordt. Want wat niet geïnstalleerd is, kan niet misbruikt worden, hoeft niet gepatched te worden en zorgt zo om meerdere redenen voor minder downtime van de server. De functionaliteit die van een server een machine maken waar een gebruiker uiteindelijk iets mee kan, noemt Microsoft tegenwoordig roles. Deze rollen moeten na basis installatie en configuratie van het besturing systeem geïnstalleerd worden.
| Module Name |
Module DLL |
| AnonymousAuthenticationModule |
authanon.dll |
| DefaultDocumentModule |
defdoc.dll |
| DirectoryListingModule |
dirlist.dll |
| ProtocolSupportModule |
protsup.dll |
| StaticFileModule |
static.dll |
| RequestFilteringModule |
modrqflt.dll |
| CustomErrorModule |
custerr.dll |
| StaticCompressionModule |
compstat.dll |
| HttpLoggingModule |
loghttp.dll |
| HttpCacheModule |
cachhttp.dll |
Table 1: Native modules die geïnstalleerd en geregistreerd worden bij een standaard installatie van IIS 7.0
Dit kan op diverse manieren gebeuren, waarbij de configuration wizard als eerste getoond wordt. Een tweede mogelijkheid is de server manager, de nieuwe managementconsole om een server te beheren. In deze server manager zijn de rollen en de bijbehorende beheerstools terug te vinden.
Het installeren van een server rol lijkt niet heel nieuw; in Windows Server 2003 gebeurde dit ook, alleen hier waren de rollen een stuk minder modulair. Op het moment dat voor de installatie van IIS 6.0 gekozen werd, werd er een behoorlijk vastgelegde set files en dientengevolge instructiesets geïnstalleerd en alle authenticatiemodules werden geïnstalleerd. Functionaliteit als CGI, ISAPI filters en andere applicatietoegangen voor server based applicaties werden allemaal mee geïnstalleerd. Dit had een voordeel, maar had zeker ook een tweetal nadelen. Het voordeel is duidelijk, er hoefde alleen gespecificeerd te worden dat IIS geïnstalleerd moest worden en alles zou wel werken. De nadelen zijn onder andere, dat er meer zaken optioneel gepatched moesten worden, ook al werden de componenten niet actief gebruikt. En dit kon voor downtime van de service of soms zelfs de server zorgen, wat natuurlijk onwenselijk was. Een ander mogelijk nadeel is, dat ongepatchte en ongebruikte software op een machine wel degelijk een potentieel gevaar vormt, zeker als er een security gat in gevonden wordt.
In WS2008 is deze manier van werken drastisch veranderd. Bijna iedere component is nu afzonderlijk als module te installeren. Dientengevolge is deze module ook niet eerder te gebruiken, dan dat hij geïnstalleerd is. Figuur 1 geeft een indruk van de hoeveelheid modules en van de modules die aanwezig zijn.

Fig. 1: Een aantal kiesbare modules IIS 7.0, waaronder diverse authenticatie modules en application development modules
Een belangrijk gevolg voor u als ontwikkelaar is natuurlijk, dat tijdens het initiële ontwerpproces ook de aanwezige modules in productie bekend moeten zijn. Deze wetenschap is essentieel om de te bouwen applicatie goed te laten werken. Dit zou kunnen betekenen, dat er eventueel ook gekozen kan worden om bepaalde calls niet meer via niet geïnstalleerde modules te laten lopen, maar de functionaliteit zelf te bouwen, terwijl onder IIS 6.0 de gevraagde functionaliteit per definitie aanwezig was.
Door op deze manier te werken dwingt IIS 7.0 de ontwikkelaar al op een vroeg moment in het proces verstrekkende keuzes te maken. De andere kant van de medaille is, dat dit u ook weer een heleboel vrijheid biedt. De modules die hier bedoeld worden, zijn ook met naam en pad geregistreerd in de configuratiebestanden die hierna besproken zullen worden. Mocht voor een applicatie een aanpassing aan een van de modules nodig zijn, kunt u deze module herschrijven, aanpassen of anderszins voorzien van de benodigde functionaliteit. In het config-file verwijst u simpelweg naar uw bestand, zonder de bestaande modules te overschrijven of te verwijderen. Hierdoor zijn de veranderingen aan de standaard functionaliteit van IIS minder irreversibel geworden.
Configuratiefiles
Iets anders wat opvalt in de nieuwe manier van werken, is de wijze waarop de configuraties van IIS en de daarop aanwezige websites opgeslagen worden. De metabase is niet meer, de configuraties zijn tegenwoordig simpel opgeslagen in een aantal files:
- server configuratie in applicationhost.config
- website configuratie in de Web.config.
In de applicationhost.config zijn drie secties te vinden:
- de sectie waarin staat welke modules op de server zijn geïnstalleerd en worden gebruikt
- de sectie waar te vinden is welke applicatie welke modules gebruikt
- de sectie waarin omschreven wordt welke mappings gebruikt moeten worden bij verzoeken die binnenkomen bij de modules.
Een webfarm met meerdere servers is eenvoudiger te configureren
Een belangrijk voordeel aan het werken op deze manier is de mogelijkheid om web applicaties op te schalen naar een webfarm met meerdere servers die hetzelfde geconfigureerd moeten worden: deze applicationhost .config file hoeft niet op de web server te staan. Dit bestand zou ook op een share achter de webfarm kunnen staan en uitgelezen kunnen worden door al de machines verantwoordelijk voor de webfarm. Op deze manier hoeft een beheerder bij een verandering dit nog maar een keer door te voeren en al de machines zijn op de hoogte van de verandering (vooropgesteld dat wel dezelfde modules aanwezig zijn op alle systemen). Beheer van de configuratie van de web service kan nu dan ook door rechtstreeks de file te bewerken. Deze bewerking vindt direct zijn weerslag in het gedrag van de machine.
Een derde manier om de webserver te bewerken is via de commandline applicatie AppCmd.exe, eEen executable die te vinden is in de windows\system32\inetsrv map. Om op een consistente manier websites, applicatie pools en configuraties hiervoor uit te rollen is er een commandline tool, waarbij het gebruik van scripting natuurlijk een uitkomst is. Op deze manier kunt u er van verzekerd zijn, dat de ene website met bijbehorende applicatie pool en de andere identiek zullen zijn.
Als het gaat om configuratie is er nog een verandering waar u wellicht mee te maken krijgt: de mogelijkheid tot het delegeren van de te configureren instellingen. Vanaf de server naar beneden is het mogelijk om specifieke instellingen te forceren, waarbij andere instellingen wél op een lager niveau geconfigureerd kunnen worden. Deze feature delegation gaat uit van een aantal instellingsmogelijkheden: read/write, read only, not delegated en reset to inherited. De opties not delegated en read only hebben op functioneel gebied hetzelfde resultaat, maar voor de beheerder ziet het er duidelijk anders uit. Voor troubleshoot doeleinden is de read only variant dan ook aan te raden.
FastCGI en PHP
Een belangrijke andere verandering voor Microsoft is de toevoeging van FastCGI aan IIS 7.0. Deze toevoeging maakt het mogelijk om op een andere manier PHP applicaties op uw webserver te draaien anders dan via ISAPI filters. De nieuwe manier blijkt volgens een aantal recente onderzoeken sneller te zijn dan PHP op Linux, is in ieder geval sneller dan PHP via ISAPI. Om dit voor elkaar te krijgen hoeft u, als ontwikkelaar, eigenlijk maar een paar stappen te doen. Natuurlijk hebt u PHP nodig. Verder zijn er op IIS twee stappen nodig. Om te beginnen moet u natuurlijk de CGI module installeren en deze module brengt ook FastCGI mee. Daarnaast moet u in IIS de file handler definiëren die voor de afhandeling van de PHP files zorgt. Deze handler zal moeten verwijzen naar de goede executable van PHP; in het voornoemde geval zal dat php-cgi.exe zijn. In figuur 2 is de configuratie te zien van deze nieuwe mogelijkheid.
PHP op IIS 7.0 is eenvoudig

Fig. 2: PHP applicaties afhandelen middels de FastCGI module
Forms Authenticatie
Een laatste verandering die ik wil bespreken in dit artikel, is de mogelijkheid om forms authenticatie te gebruiken. Deze manier van authenticatie is al enige tijd erg gangbaar, maar moest in de applicatie geregeld worden. In IIS 7.0 is de mogelijkheid om vanuit IIS forms authenticatie te initiëren. De formulieren en verder afhandeling zullen in de applicatie moeten plaatsvinden, maar de eerste respons (http 302 error: login/redirect) zal dan door IIS worden gestart. De te gebruiken pagina zal zelf geschreven moeten worden, alleen de redirect zal plaatsvinden vanuit IIS.
Conclusie
IIS 7.0 is een grote stap in een richting, die IIS makkelijker en beheerbaarder maakt. Het biedt voor een ontwikkelaar (maar ook voor een beheerder) een aantal nieuwe kanten. Die kanten zullen in het begin even wennen zijn, maar uiteindelijk zullen die wel de meerwaarde van het platform bepalen. Al met al lijkt IIS 7.0 momenteel een serieuze kandidaat om in te zetten voor uw webapplicaties en uw web servers. En niet meer alleen in een intranet omgeving, maar ook daadwerkelijk in een internet omgeving.
In dit artikel is een aantal punten aangestipt, zoals de uitbreiding van het aantal mogelijkheden om vanuit IIS authenticatie te gebruiken. Daardoor hoeft u zich als webapplicatie-ontwikkelaar minder met de randvoorwaarden in uw code bezig te houden, maar u zich kunt richten op de verwachte functionaliteit van de applicatie. Dit lijkt toch een duidelijke verbetering te zijn.
De verbreding van de inzetbaarheid van het platform, zoals een betere ondersteuning voor b.v. PHP applicaties, is op zijn minst een grote verandering te noemen. Een duidelijk teken dat Microsoft erkent dat PHP in de wereld van de webapplicaties een belangrijke rol speelt. Als de getallen blijken te kloppen, is het zeker een platform waar we in de toekomst van gaan horen als het gaat om deze PHP applicaties. Voor het overige is het aan U om het te testen en uw oordeel erover te vellen.