Wat is IIS?

In dit bericht gaan we IIS (Internet Information Services) onder de loep nemen. We zullen kijken naar wat het doet en hoe het werkt. Je leert hoe je het inschakelt onder Windows. En nadat we een basis hebben gelegd met het beheren van IIS via de GUI, zul je zien hoe je ermee kunt werken via de CLI. Laten we beginnen!

Wat is een IIS Web Server?

Een IIS web server draait op het Microsoft .NET platform op het Windows OS. Hoewel het mogelijk is om IIS op Linux en Macs te draaien met Mono, is het niet aan te raden en zal het waarschijnlijk instabiel zijn. (Er zijn andere opties, die ik later zal presenteren). Het is veelzijdig en stabiel, en het wordt al vele jaren op grote schaal in productie gebruikt. Versie 10 is de meest recente. Zodra het geïnstalleerd is, zie je deze welkomstpagina in je browser. “Tervetuloa!”

Maar voordat we ons gaan verdiepen in de fijne kneepjes van IIS, beginnen we met het definiëren van een webserver in algemene zin.

Wat is een webserver?

Het internet is goed. En het internet kan niet bestaan zonder webservers. Maar wat is nu precies een webserver? Laten we dat eens in het abstracte definiëren, zodat we enige context hebben voor hoe IIS deze rol vervult.

Een webserver is een proces voor het hosten van webapplicaties. De webserver stelt een toepassing in staat om berichten te verwerken die binnenkomen via specifieke TCP-poorten (standaard). De standaardpoort voor HTTP-verkeer is bijvoorbeeld 80, en die voor HTTPS is 443.

Wanneer u een website in uw browser bezoekt, geeft u meestal niet het poortnummer op, tenzij de webserver is geconfigureerd om verkeer op andere poorten dan de standaardpoort te ontvangen. Als u http://www.example.com bezoekt, wordt uw verzoek impliciet naar poort 80 gestuurd. U zou het poortnummer kunnen specificeren als u http://www.example.com:80, en https://www.example.com:443 voor TLS (Transport Layer Security).

Aannemend dat de standaardconfiguratie en TLS is geconfigureerd voor uw webapplicatie, zal de webserver al het inkomende verkeer ontvangen op de poorten 80 en 443. Het hangt ervan af wat de webserver met het verkeer vanaf die poorten doet. Er zijn talloze opties voor hoe de webserver die verzoeken kan verwerken.

Hoe handelt IIS webverzoeken af?

De twee belangrijkste procesmodellen voor webservers zijn om ofwel alle verzoeken op een enkele thread af te handelen, of om voor elk verzoek een nieuwe thread te spawnen. Hoewel het single-thread model (Node.js, bijvoorbeeld) een aantal worker threads beschikbaar heeft, gebruikt het deze meestal alleen voor bepaalde soorten werk, zoals toegang tot het bestandssysteem. Het thread-per-request model dat IIS (en zijn lichtgewicht neefje IIS Express) gebruikt, haalt voor elk request een thread uit een thread pool.

Web servers behandelen requests meestal met behulp van een request-response patroon. De client stuurt een verzoek en krijgt als het goed is een antwoord. Het HTTP-protocol is de alomtegenwoordige keuze bij de communicatie tussen een client en een webserver over het internet.

Features

IIS is rijk aan mogelijkheden. Meestal wordt IIS gebruikt voor het hosten van ASP.NET webapplicaties en statische websites. Het kan ook worden gebruikt als een FTP-server, WCF-diensten hosten, en worden uitgebreid voor het hosten van webtoepassingen die zijn gebouwd op andere platforms, zoals PHP.

Er zijn ingebouwde verificatie-opties, zoals Basic, ASP.NET, en Windows auth. De laatste is handig als u een Windows Active Directory-omgeving hebt – gebruikers kunnen automatisch worden aangemeld bij webtoepassingen met behulp van hun domeinaccount. Andere ingebouwde beveiligingsfuncties zijn TLS-certificaatbeheer en -binding om HTTPS en SFTP op uw sites mogelijk te maken, verzoekfiltering voor het whitelisten of blacklisten van verkeer, autorisatieregels, verzoeklogging, en een uitgebreide set FTP-specifieke beveiligingsopties.

Een belangrijke functie van IIS is de applicatiepool. We zullen de application pool nader moeten bekijken, omdat het een cruciaal onderdeel is van het IIS-procesmodel.

Een functie van onschatbare waarde is beheer op afstand. IIS kan ook worden beheerd via de CLI of met PowerShell. Je kunt alles scripten, wat geweldig is als je van de kracht houdt die dat met zich meebrengt.

Je zou nu een goede indruk moeten hebben over de configureerbaarheid en veelzijdigheid van IIS. Je zou ook moeten weten dat het kan worden uitgebreid om (pun intended) vele doelen te dienen naast het hosten van ASP.NET apps. Door uitbreiding wordt IIS een zeer veelzijdige en stabiele webserver voor het Windows platform. Laten we eens kijken hoe je IIS installeert op Windows 10. (Hetzelfde proces geldt voor Windows 7 en 8.)

Installeer IIS

Het “installeren” noemen zou een beetje veel zijn. Immers, IIS is een functie in Windows. Wat je echt moet doen is de functie inschakelen. In Windows 10 kun je op de Windows-toets drukken en “zet win aan” typen. U ziet dan “Windows-functies in- of uitschakelen.”

Selecteer dat om het dialoogvenster “Windows-functies” te openen. Van hieruit kunt u allerlei extra functies inschakelen, waaronder PowerShell 2.0, een diepe mappenstructuur met opties voor Internet Information Services (IIS), en een subsysteem voor Linux. (Ik moet zeggen dat die laatste optie me vaak van pas is gekomen, bijvoorbeeld wanneer een Node-app shellscripts bevat als onderdeel van de npm-build).

De optie Internet Information Services (IIS) is degene die we willen!

Door alleen maar op het vakje te klikken, heb je een goed beginpunt. Misschien wilt u echter dieper graven. World Wide Web Services > Application Development Features is waar u ASP.NET, CGI en WebSocket Protocol inschakelt. Je kunt hier altijd op terugkomen als je aanpassingen wilt maken.

Om IIS op Windows Server in te schakelen, kun je PowerShell of Server Manager gebruiken om de “Web Role (IIS)” te installeren. Zie deze walkthrough voor details.

Als je alle gewenste IIS-functies hebt geselecteerd, klik je op OK en ga je een verse kop koffie halen. Als de installatie klaar is, kun je de IIS GUI openen door “IIS” in te typen in de Windows zoekmachine of door “inetmgr” uit te voeren.

De GUI

Voordat we in details treden, wil ik je een korte introductie geven in IIS Manager. Ik heb de gebieden van belang gemarkeerd, omdat dit ding zo’n puinhoop is. Het is even wennen, maar er zijn een paar dingen waar ik je mee kan helpen, als het gaat om de weg hier.

Allereerst zijn er drie vensters. In het linker staan de aangesloten servers. (U kunt ook verbinding maken met externe servers.) In het middelste deelvenster vindt u alle functies, zoals applicatiebeveiliging, logboekregistratie, filtering en omleiding. Of als je “Content View” selecteert, dan zie je de inhoud hier in het midden. Aan de rechterkant is het actie paneel. Dit verandert afhankelijk van de geselecteerde context.

Ik weet niet zeker waarom dat kleine extra pictogram rechtsonder er is, maar je kunt de grootte van het venster daar ook aanpassen.

TIP: je kunt met de rechtermuisknop op de meeste pictogrammen klikken en het contextmenu gebruiken om de meest voorkomende acties uit te voeren.

Als je de “verbinding” in het deelvenster Verbindingen uitvouwt, is het eerste wat je zou moeten zien “Application Pools”, gevolgd door “Sites.” Daar gaan we ons op richten in de volgende twee secties.

Applicatiepools…Wat zijn het en hoe werken ze?

Hier een blik op de applicatiepools die standaard in IIS zijn ingesteld. Zoals u kunt zien, zijn er combinaties van v2.0 en v4.0, en van klassiek en geïntegreerd.

De geïntegreerde pijplijn verschilt van de klassieke pijplijn in die zin dat ASP.NET is geïntegreerd in de aanvraagpijplijn van IIS. In de klassieke modus moesten verzoeken door een pijplijn voor IIS en een andere voor ASP.NET. Geïntegreerd is de voorkeursmodus sinds IIS 7 werd uitgebracht met Windows Server 2008 en Vista. Gebruik geen klassieke modus tenzij het echt moet. Hetzelfde geldt voor v2.0. Die zijn er alleen voor legacy support. In feite, als je die applicatiepools niet nodig hebt, kun je ze net zo goed gewoon verwijderen. We hebben geen behoefte aan rondslingerende rommel!

Een enkele applicatie pool heeft nul tot vele werkprocessen (w3wp.exe) draaien op elk gegeven moment. De werkprocessen voeren instanties van uw toepassing uit.

Applicatiepools maken

In het deelvenster “Acties” aan de rechterkant van het IIS-venster klikt u op “Applicatiepool toevoegen…” om het dialoogvenster te openen. Het is vrij eenvoudig. U kunt meestal gewoon een naam invoeren en op “enter” drukken of op “OK” klikken.”

U kunt ook een applicatiepool toevoegen door met de rechtermuisknop te klikken op het knooppunt “Applicatiepools” in het deelvenster “Verbindingen”. De tip van eerder bewijst zijn waarde al!

App pool users

IIS maakt een virtuele gebruiker voor elke app pool (gangbare nomenclatuur voor applicatie pool). Deze werkprocessen worden standaard uitgevoerd als de virtuele gebruiker van de app-pool. Ze kunnen als een andere gebruiker worden uitgevoerd (bijvoorbeeld een domeinaccount) als ze speciale machtigingen nodig hebben.

Ondanks dat ik de app-pools van de server heb verwijderd, leven de virtuele gebruikers voort!

Deze virtuele gebruikers krijgen nog steeds hun eigen standaardmappen, zoals “Bureaublad”, “Muziek” en “Afbeeldingen”. Ze nemen niet zo veel ruimte in beslag (110 MB), maar zodra de app-pool is verwijderd, zijn deze gebruikersmappen rommel en kunnen ze worden verwijderd.

App-poolrecycling

Een belangrijk kenmerk van app-pools is recycling. Standaard worden app pools elke 1740 minuten (29 uur) gerecycled, en wanneer het configuratiebestand wordt gewijzigd. U kunt recycling configureren om aan uw behoeften te voldoen. Het recyclen van app pools maakt het geheugen vrij dat wordt gebruikt door applicaties die in een app pool draaien. Recycling kan voorkomen dat op hol geslagen processen al het geheugen op uw server opeten.

Wat voor soort dingen gebruiken geheugen in uw proces? Alles op de stack en heap – statische variabelen en eigenschappen, alles in de geheugencache, alle objecten waarnaar een ander object verwijst, alle blokken geheugen die wachten op een vuilnisophaaldienst, u begrijpt het al.

U kunt kiezen welke gebeurtenissen u wel of niet wilt loggen. Zoals u kunt zien, worden niet alle opties in het vorige dialoogvenster weergegeven – “Runtime recycling events” lijken niet configureerbaar te zijn. Dit is niet helemaal waar.

Een recycle start een nieuw proces en spint vervolgens het huidige proces af. Het nieuwe proces zal, zoals je zou verwachten, een nieuwe PID hebben. Je kunt dit gedrag en ander recycling gedrag veranderen in “Geavanceerde instellingen…”. In feite kun je alle recycling configuraties in dit menu bewerken. Het “Recycling…” dialoogvenster is in dat opzicht overbodig. Je kunt hier echter wel recycling uitschakelen voor configuratiewijzigingen. Waarschijnlijk wil je dat niet. Uw draaiende toepassing zou de configuratie-updates niet krijgen.

Merk op dat “overlappende recycling” impliceert dat het mogelijk is om meer dan één instantie van de toepassing te hebben. U dient dit alleen uit te schakelen als uw toepassing dit vereist. Overlappende recycle voorkomt verstoringen die zouden optreden als de recycle wacht tot het huidige proces verzoeken heeft afgevoerd voordat het nieuwe proces wordt gestart. Met andere woorden, er zouden geen nieuwe verzoeken worden afgehandeld totdat de huidige verzoeken zijn voltooid of de instelbare time-outperiode is verstreken (standaard 90 seconden).

Geavanceerde Configuratie

Er zijn veel te veel app pool-configuraties om in detail te bespreken in deze post. Voor nu, zal een kort overzicht moeten volstaan. Ik zal snel enkele punten opsommen voor elk van de gebieden van “Geavanceerde instellingen”, zoals hieronder weergegeven.

  • Met de instelling “Algemeen” kunt u
    • Verander .NET CLR-versies
    • Laat 32-bit toepassingen
    • Pijplijnmodus wijzigen
    • Wachtrijlengte instellen (standaard 1000 verzoeken)
    • Instellen om altijd of op verzoek te draaien
  • De “CPU”-optie omvat
    • Throttling
    • Processor affiniteit
  • “Procesmodel” laat u de instellingen kiezen voor
    • Identiteit
    • Idle timeout
    • Max worker processen
    • Gezondheidsmonitoring (U moet dit lokaal uitschakelen voor debuggen omdat een stopgezette debugger niet zal reageren op ping)
  • “Process Orphaning” is nuttig voor het debuggen van niet-reagerende processen
  • “Rapid-Fail Protection” is goed voor wanneer u load balancer reacties op storingen wilt configureren

Sites

“Sites” is het knooppunt naast “Application Pools” in het server knooppunt van IIS manager. Het is hier dat je websites en FTP sites (indien geïnstalleerd) kunt toevoegen en beheren. Terwijl applicatiepools een dialoogvenster met geavanceerde instellingen hebben, hebben sites veel meer configuratieopties! Sites hebben veel functies, elk met hun eigen configuraties.

Deze functies vallen onder drie kopjes in de IIS manager:

  • ASP.NET (als u dat hebt geïnstalleerd)
  • IIS
  • Management

Context menu

U kunt schakelen tussen “Features” en “Content” als u een site hebt geselecteerd. U kunt met de rechtermuisknop op de site klikken en de map openen vanuit het contextmenu door “Verkennen” te selecteren. Er zijn andere dingen die je vanuit dit contextmenu kunt doen, zoals machtigingen bewerken.

Dit brengt eigenlijk alleen de eigenschappen van de map van de site naar voren. Van daaruit moet u naar het tabblad “Beveiliging” gaan om de machtigingen daadwerkelijk te bewerken.

Op de typische Windows-manier zijn er verschillende andere manieren waarop u machtigingen kunt bewerken. Raadpleeg uw favoriete Windows-helpsites voor meer informatie over het instellen van mapmachtigingen.

U kunt verschillende veelvoorkomende taken uitvoeren vanuit het contextmenu. In het onderdeel “Website beheren” kunt u de website starten en stoppen, in uw browser openen, en naar geavanceerde instellingen gaan. Daar willen we zeker naar kijken, maar laten we het eerst hebben over wat je te zien krijgt als je “Bindingen bewerken…” selecteert, wat ook beschikbaar is in het “Actie” paneel als “Bindingen…”.

Bindingen

Je moet een site binding toevoegen in het “Bindingen…” dialoog als je HTTPS inschakelt voor je site. U kunt daar ook de hostnaam en poortnummers instellen. Als je extra bindingen voor je site hebt, kun je die hier ook toevoegen. Misschien gebruik je de bindingen net.tcp of net.pipe (als je die functies op de server hebt toegevoegd en ingeschakeld voor de site). Of je kunt hier een IP adres instellen.

Het is mogelijk om meer dan een site te laten luisteren op dezelfde poort. Om dit te doen, zul je verschillende host namen gebruiken. U kunt bijvoorbeeld admin.example.com koppelen aan uw beheerdersite en blog.example.com aan uw blog. Al het verkeer van example.com gaat dan naar hetzelfde IP (load-balancer/server), maar IIS gebruikt de host-header om verkeer naar de juiste site te leiden. Deze zijn ook nuttig voor white-label apps: acme.example.com, foo.example.com, bar.example.com.

Basisinstellingen

“Basisinstellingen…” is hetzelfde dialoogvenster dat u krijgt wanneer u de site voor het eerst opzet. Je hoeft hier waarschijnlijk niet naar toe, tenzij je de applicatiepool of de locatie van de site wilt wijzigen of als je verbinding wilt maken als een andere gebruiker, in plaats van IUSR (pass-thru). Als u een serviceaccount moet gebruiken om toegang te krijgen tot de sitedirectory, kunt u in het dialoogvenster “Site bewerken” kiezen voor “Verbinding maken als…”.

Note: alle directories die u in IIS gebruikt, moeten goed worden beveiligd. Het kan nuttig zijn te lezen hoe de standaardmap inetpub wordt beveiligd.

Sub-sites en virtuele directory’s

U kunt verschillende toepassingen en virtuele directory’s onder één site hosten. Applicaties kunnen in hun eigen applicatiepools draaien, maar virtuele directories niet. Zoals hieronder te zien is, heb ik een admin applicatie en een blog virtuele directory opgezet onder Site2. Ze zijn toegankelijk via http://localhost/admin en http://localhost/blog. Beide zullen reageren met ingebouwde foutpagina’s, tenzij er iets in de directory’s staat.

De brondirectory’s voor subapplicaties en virtuele directory’s hoeven geen subdirectory’s van de bovenliggende site te zijn. U kunt deze directories op elke gewenste plaats opslaan. Het kan zijn dat je sommige veelgebruikte webbronnen (afbeeldingen of JS-bestanden) wilt toewijzen aan een relatief pad voor meerdere sites. Virtuele directories zijn hier perfect voor.

Standaard- en foutdocumenten

Wanneer een gebruiker de root van uw site (www.example.com/) bezoekt, krijgt hij een standaard document te zien. De standaarddocumenten worden hieronder getoond. U kunt uw eigen documenten toevoegen, documenten verwijderen, of ze helemaal uitschakelen. Als je ze uitschakelt, krijgt de gebruiker een lelijk 403 foutscherm, tenzij je toestemming hebt gegeven om de inhoud van mappen te tonen (niet aanbevolen). Het is het beste om een standaarddocument te hebben.

Ik heb in elke directory een indexdocument gezet: de site, de toepassing en de virtuele directory.

  • Site2
    • Admin
      • index.html
    • Blog
      • index.html
    • index.html
  • http://localhost/ laadt het standaarddocument op Site2/index.html
  • http://localhost/admin/ laadt het standaarddocument op Site2/Admin/index.html
  • http://localhost/blog/ laadt het standaarddocument op Site2/Blog/index.html

Als u zich zorgen maakt over het feit dat IIS geheugen en CPU van uw machine in beslag neemt, hoeft u dat niet te doen. Tenzij de werkprocessen draaien (en verzoeken met zware verwerking afhandelen), zit het inactief. Als u zwaar CPU-gebruik ziet, kan deze probleemoplossingsgids u helpen, mits u ASP.NET gebruikt.

CLI en beheer op afstand

AppCmd.exe

AppCmd is het ingebouwde CLI-hulpprogramma voor het configureren en beheren van IIS. U kunt het gebruiken om sites en app pools te maken, virtuele directories te koppelen, en configuraties te bewerken. Laten we eens kijken naar een paar dingen die het kan doen.

Voeg allereerst %systemroot%system32inetsrv aan je pad toe, zodat je appcmd vanaf een opdrachtprompt op elke locatie kunt uitvoeren.

Run de opdrachtprompt als beheerder.

setx PATH "%PATH%;%systemroot%\system32\inetsrv\"

Probeer de volgende commando’s om appcmd te verkennen:

  • Run appcmd /? om de helptekst te zien
  • Zie welke apps worden uitgevoerd met appcmd list app
  • Gebruik appcmd list backup om backups van uw IIS-config te zien

Voeg site toe

appcmd add site /name:"Dummy Site" /id:10 /bindings:http/*:81:

Nu weer apps in de lijst zetten. U zult de nieuwe site die u hebt toegevoegd niet zien omdat die niet als een app wordt beschouwd. Als u naar de GUI gaat en uw sites vernieuwt, zult u de nieuwe site daar zien, maar het zal gebroken zijn. We moeten een app toevoegen met appcmd.

appcmd add app /site.name:"Dummy Site" /path:"/"

Dit voegt de app alleen toe aan de site bij de root. Het zal een app maken met de naam “Dummy Site/”. We moeten de app nog steeds aan een virtuele directory koppelen en die vervolgens naar een fysiek pad verwijzen.

appcmd add vdir /app.name:"Dummy Site/" path:"/"appcmd set vdir "Dummy Site/" /physicalPath:"c:\inetpub\wwwroot"

Dit is de uitgebreide manier om appcmd te gebruiken om een IIS site te maken. Er is een makkelijkere manier.

De EZ manier

Je kunt een hoop toetsaanslagen besparen tijdens het maken van de site als je de physicalPath parameter in het eerste commando zet. Dit doet alles in een keer:

appcmd add site /name:"Dummy Site" /id:10 /bindings:http/*:81: /physicalPath:"c:\inetpub\wwwroot"

Maar als je de andere commando’s kent, krijg je een beter idee van hoe een IIS app echt werkt onder de motorkap. In het verleden heb ik appcmd gebruikt in het post-build script van ASP.NET proj bestanden om er zeker van te zijn dat de site lokaal werd opgezet op nieuwe ontwikkelaars machines. U kunt ook een backup maken en de IIS-configuratie herstellen met appcmd.

Updates verspreiden

Om u nog een idee te geven over het gebruik van appcmd, kunt u overwegen het volgende te doen:

  1. Maak een “sites”-map.
  2. Maak een submap voor elke site.
  3. Deploy versies naar submappen onder elk van die.
  4. Stage nieuwe versies.
  5. Gebruik appcmd om de site te updaten om de nieuwe map te gebruiken.

Geef een app met de naam “Hello World” die wijst naar C:SitesHelloWorld1.0.0 en een nieuwe build “1.0.1” die is ge-staged in C:\Sites\HelloWorld1.0.1 , wanneer het tijd is om live te gaan, dan kunt u het volgende commando gebruiken om de site om te zetten naar de nieuwe versie:

appcmd set vdir "Dummy Site/" /physicalPath:"c:\Sites\HelloWorld.0.1"appcmd recycle apppool /apppool.name:defaultapppool

En als u uw site moet terugdraaien, voert u het volgende uit:

appcmd set vdir "Dummy Site/" /physicalPath:"c:\Sites\HelloWorld.0.0"appcmd recycle apppool /apppool.name:defaultapppool

Hier is een goede handleiding van Microsoft met meer informatie over het gebruik van AppCmd.

IIS reset

“iisreset” is een afzonderlijk uitvoerbaar bestand dat wordt gebruikt om IIS te stoppen, te starten of opnieuw op te starten, of om de computer opnieuw op te starten (/REBOOT). Je kunt het een “computername” parameter meegeven om IIS op een andere computer te laten draaien. Je moet dit als admin uitvoeren. Veel ontwikkelaars en systeembeheerders gebruiken dit graag na een implementatie, en dat is ook geen slecht idee!

PowerShell

PowerShell heeft een krachtige set gereedschappen voor het beheren van IIS. Je zou het iisreset commando ook op afstand kunnen versturen met Invoke-Command -ComputerName “computername” -ScriptBlock {iisreset}, mits je toestaat dat op afstand willekeurige commando’s op je servers worden aangeroepen – en dat is over het algemeen geen goed idee!

Ondanks mijn eigen veiligheidszorgen over het versturen van willekeurige commando’s op afstand met PowerShell, zijn de IIS administration cmdlet echt nuttig voor DevOps-stijl web server admin. U kunt deze documentatie voor IIS beheer met PowerShell bekijken om een idee te krijgen van wat het kan doen.

Uitschakelen

Ondanks alle functies, configuraties en commando’s die we in dit bericht hebben behandeld, hebben we nog maar een klein beetje van het oppervlak gezien. Elke functie heeft zijn eigen configuraties, en er zijn vele uitbreidingen die kunnen worden toegevoegd door het installeren van de Web Platform Installer extensie.

En daarmee, laten we deze post en de IIS-server tot een einde brengen:

iisreset /stop

Met APM, server health metrics, en error log integratie, verbeter de prestaties van uw applicatie met Stackify Retrace. Probeer vandaag nog uw gratis proefversie van twee weken

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.