Vad är IIS?

I det här inlägget ska vi titta närmare på IIS (Internet Information Services). Vi kommer att titta på vad den gör och hur den fungerar. Du kommer att lära dig hur du aktiverar den i Windows. Och efter att vi har etablerat en baslinje med att hantera IIS med hjälp av GUI, kommer du att se hur du kan arbeta med det med hjälp av CLI. Nu sätter vi igång!

Vad är en IIS-webbserver?

En IIS-webbserver körs på Microsoft .NET-plattformen på Windows-operativsystemet. Det är möjligt att köra IIS på Linux och Macs med hjälp av Mono, men det rekommenderas inte och kommer sannolikt att vara instabilt. (Det finns andra alternativ, som jag kommer att presentera senare). Det är mångsidigt och stabilt, och det har använts flitigt i produktionen i många år. Version 10 är den mest aktuella. När den är installerad kommer du att se den här välkomstsidan i din webbläsare. ”Tervetuloa!”

Men innan vi gräver ner oss i IIS’ detaljer börjar vi med att definiera en webbserver i allmän mening.

Vad är en webbserver?

Internet är bra. Och internet kan inte existera utan webbservrar. Men vad exakt är en webbserver? Låt oss definiera det i abstrakt form så att vi kan få ett sammanhang för hur IIS fyller denna roll.

En webbserver är en process för hosting av webbprogram. Webbservern gör det möjligt för ett program att behandla meddelanden som anländer via specifika TCP-portar (som standard). Standardporten för HTTP-trafik är till exempel 80 och för HTTPS 443.

När du besöker en webbplats i din webbläsare anger du vanligtvis inte portnumret om inte webbservern är konfigurerad för att ta emot trafik på andra portar än standardporten. Om du besöker http://www.example.com skickas din begäran implicit till port 80. Du kan ange portnumret om du vill ha http://www.example.com:80 och https://www.example.com:443 för TLS (Transport Layer Security).

Att utgå från standardkonfigurationen och att TLS är konfigurerat för ditt webbprogram innebär att webbservern tar emot all inkommande trafik till portarna 80 och 443. Vad webbservern gör med trafiken därifrån beror på. Det finns otaliga alternativ för hur webbservern kan behandla dessa förfrågningar.

Hur hanterar IIS webbförfrågningar?

De två huvudsakliga processmodellerna för webbservrar är att antingen hantera alla förfrågningar på en enda tråd eller att skapa en ny tråd för varje förfrågan. Även om modellen med en enda tråd (Node.js, till exempel) har några arbetstrådar tillgängliga, används de vanligtvis bara för vissa typer av arbete, till exempel åtkomst till filsystemet. Tråd-per-förfrågan-modellen som IIS (och dess lättviktiga kusin IIS Express) använder hämtar en tråd från en trådpool för varje begäran.

Webbservrar hanterar vanligtvis begäranden med hjälp av ett begäran-svar-mönster. Klienten skickar en begäran och får ett svar om allt går bra. HTTP-protokollet är det allestädes närvarande valet när man kommunicerar mellan en klient och en webbserver över Internet.

Funktioner

IIS är rik på funktioner. Vanligast är att IIS används som värd för ASP.NET-webbprogram och statiska webbplatser. Den kan också användas som FTP-server, vara värd för WCF-tjänster och utökas för att vara värd för webbapplikationer som är byggda på andra plattformar, t.ex. PHP.

Det finns inbyggda autentiseringsalternativ, t.ex. Basic, ASP.NET och Windows auth. Det sistnämnda är användbart om du har en Windows Active Directory-miljö – användare kan automatiskt loggas in i webbprogram med sitt domänkonto. Andra inbyggda säkerhetsfunktioner är hantering och bindning av TLS-certifikat för att aktivera HTTPS och SFTP på dina webbplatser, filtrering av begäranden för vitlistning eller svartlistning av trafik, auktoriseringsregler, loggning av begäranden och en omfattande uppsättning FTP-specifika säkerhetsalternativ.

En viktig funktion i IIS är programpoolen. Vi måste ta en närmare titt på applikationspoolen eftersom den är en viktig komponent i IIS processmodell.

En ovärderlig funktion är fjärrhantering. IIS kan också hanteras via CLI eller med hjälp av PowerShell. Du kan skriva allting i skript, vilket är bra om du gillar den kraft som följer med att kunna göra det.

Härmed bör du ha fått ett gott intryck av konfigurerbarheten och mångsidigheten hos IIS. Du bör också vara medveten om att det kan utökas för att tjäna (med ordvitsen i åtanke) många andra syften än att vara värd för ASP.NET-applikationer. Genom utökning blir IIS en mycket mångsidig och stabil webbserver för Windows-plattformen. Låt oss ta en titt på hur du installerar IIS på Windows 10. (Samma process gäller för Windows 7 och 8.)

Installera IIS

Att kalla det ”installera” skulle vara lite väl mycket. IIS är trots allt en funktion i Windows. Vad du egentligen behöver göra är att aktivera funktionen. I Windows 10 kan du trycka på Windows-tangenten och skriva ”turn win”. Du bör se ”Turn Windows features on or off.”

Välj det för att öppna dialogrutan ”Windows features”. Härifrån kan du aktivera alla möjliga ytterligare funktioner, inklusive PowerShell 2.0, ett djupt katalogträd med alternativ för Internet Information Services (IIS) och ett undersystem för Linux. (Jag måste säga att det sistnämnda har varit praktiskt för mig många gånger, till exempel när en Node-app har några skalskript som en del av npm-bygget).

Objektet Internet Information Services (IIS) är det vi vill ha!

Det räcker med att klicka i rutan för det för att få en bra startpunkt. Du kanske dock vill gräva djupare. World Wide Web Services > Application Development Features är där du aktiverar ASP.NET, CGI och WebSocket Protocol. Du kan alltid komma tillbaka till detta om du behöver göra justeringar.

För att aktivera IIS på Windows Server kan du antingen använda PowerShell eller Serverhanteraren för att installera ”Web Role (IIS)”. Se den här genomgången för mer information.

När du har valt alla önskade IIS-funktioner klickar du på OK och går och hämtar en ny kopp kaffe. När installationen är klar kan du komma till IIS GUI genom att skriva ”IIS” i Windows-sökningen eller genom att köra ”inetmgr.”

GUI:n

Innan vi går in på detaljerna vill jag ge dig en snabb introduktion till IIS Manager. Jag har markerat de områden som är av intresse eftersom den här saken är en sådan röra. Det tar lite tid att vänja sig, men det finns några saker som jag kan erbjuda hjälp med när det gäller att ta sig runt här inne.

För det första finns det tre rutor. I den vänstra finns de anslutna servrarna. (Du kan ansluta till fjärrservrar också.) I den mellersta rutan finns alla funktioner som applikationssäkerhet, loggning, filtrering och omdirigering. Eller när du väljer ”Content View” ser du innehållet här i mitten i stället. Till höger finns fönstret för åtgärder. Denna ändras beroende på den valda kontexten.

Jag är inte säker på varför den lilla extra ikonen längst ner till höger finns där, men du kan ändra storleken på fönstret där nere också.

TIP: du kan högerklicka på de flesta ikoner och använda kontextmenyn för att utföra de vanligaste åtgärderna.

Om du expanderar ”anslutning” i anslutningsfönstret, bör det första du ser vara ”Application Pools”, följt av ”Sites”. Vi kommer att fokusera på dessa i de två följande avsnitten.

Applikationspooler…Vad är de och hur fungerar de?

Det här är en titt på de applikationspooler som konfigureras som standard i IIS. Som du kan se finns det kombinationer av v2.0 och v4.0 och av klassisk och integrerad.

Den integrerade pipelinen skiljer sig från den klassiska pipelinen genom att ASP.NET integreras i IIS:s begäranspipeline. I det klassiska läget var förfrågningar tvungna att passera genom en pipeline för IIS och en annan för ASP.NET. Integrerat har varit det föredragna läget sedan IIS 7 släpptes med Windows Server 2008 och Vista. Använd inte det klassiska läget om du inte måste. Samma sak gäller för v2.0. De är endast avsedda för äldre stöd. Om du inte behöver dessa programpooler kan du faktiskt lika gärna ta bort dem. Vi behöver inte ha någon skräp som hänger runt!

En enskild applikationspool har noll till många arbetsprocesser (w3wp.exe) som körs vid varje given tidpunkt. Arbetsprocesserna kör instanser av ditt program.

Skapande av programpooler

I fönstret ”Actions” till höger i IIS-fönstret klickar du på ”Add Application Pool…” för att få upp dialogrutan. Det är ganska enkelt. Du kan vanligtvis bara ange ett namn och trycka på ”enter” eller klicka på ”OK”.

Du kan också lägga till en programpool genom att högerklicka på noden ”Application Pools” i fönstret ”Connections”. Tipset från tidigare bevisar sitt värde redan!

Användningspoolanvändare

IIS skapar en virtuell användare för varje applikationspool (vanlig nomenklatur för applikationspool). Dessa arbetsprocesser körs som standard som apppoolens virtuella användare. De kan köras som en annan användare (t.ex. ett domänkonto) om de behöver särskilda behörigheter.

Trots att jag tog bort apppoolerna från servern lever de virtuella användarna vidare!

De här virtuella användarna får fortfarande sina egna standardmappar, t.ex. ”Skrivbord”, ”Musik” och ”Bilder”. De tar inte upp så mycket utrymme (110 MB), men när app-poolen tas bort är dessa användarmappar bara skräp och kan tas bort.

App-pools återvinning

En viktig funktion hos app-pooler är återvinning. Som standard återvinns apppooler var 1740:e minut (29 timmar) och när konfigurationsfilen ändras. Du kan konfigurera återvinningen så att den passar dina behov. Återvinning av apppooler frigör det minne som förbrukas av program som körs i en apppool. Återanvändning kan förhindra att processer som går på löpande band tuggar upp allt minne på din server.

Vilka saker använder minne i din process? Allt på stacken och heap-statiska variabler och egenskaper, allt i minnescachen, alla objekt som refereras av ett annat objekt, alla minnesblock som väntar på att bli skräpinsamlade, du får bilden.

Du kan välja vilka händelser du vill logga (eller inte logga). Som du kan se visas inte alla alternativ i föregående dialogruta – ”Runtime recycling events” verkar inte kunna konfigureras. Detta är inte helt sant.

En återvinning startar en ny process och spinner sedan ner den aktuella processen. Den nya processen kommer, som man kan förvänta sig, att ha ett nytt PID. Du kan ändra detta beteende samt andra återvinningsbeteenden i ”Avancerade inställningar…”. Faktum är att du kan redigera alla återvinningskonfigurationer i den här menyn. Dialogrutan ”Recycling…” är överflödig i det avseendet. Du kan dock stänga av återvinning för konfigurationsändringar här. Du vill förmodligen inte göra det dock. Din pågående app skulle inte få konfigurationsuppdateringarna.

Bemärk att ”överlappande återvinning” innebär att det är möjligt att ha mer än en instans av programmet. Du bör inaktivera detta endast om programmet kräver det. Overlapped recycle förhindrar störningar som skulle uppstå om recycle väntade på att den aktuella processen skulle tömma förfrågningar innan den nya processen startades. Med andra ord skulle inga nya förfrågningar hanteras förrän de aktuella förfrågningarna är avslutade eller den konfigurerbara timeoutperioden har gått ut (90 sekunder som standard).

Avancerad konfiguration

Det finns alldeles för många konfigurationer för apppooler för att kunna upprepa dem i detalj i det här inlägget. För tillfället får det räcka med en kort översikt. Jag ska snabbt rabbla några punkter om vart och ett av områdena i ”Avancerade inställningar”, som visas nedan.

  • Inställningen ”Allmänt” låter dig
    • Ändra .NET CLR-versioner
    • Allow 32-bit-tillämpningar
    • Förändra pipeline-läge
    • Inställ kö-längd (1000 förfrågningar som standard)
    • Inställ att köra alltid eller vid behov
  • Inställningsalternativet ”Processor” omfattar
    • Tröskning
    • Processor affinitet
  • ”Process modell” låter dig välja inställningar för
    • Identitet
    • Timeout för vila
    • Max arbetarprocesser
    • Hälsoövervakning (Du bör stänga av detta lokalt för felsökning eftersom en stoppad felsökare inte kommer att svara på ping)
  • ”Process Orphaning” är användbart för att felsöka processer som inte svarar
  • ”Rapid-Fail Protection” är bra när du vill konfigurera lastbalansers svar på fel

Sites

”Sites” är noden bredvid ”Application Pools” i servernoden i IIS-hanteraren. Det är här du lägger till och hanterar webbplatser och FTP-platser (om de är installerade). Medan applikationspooler har en dialogruta för avancerade inställningar har webbplatser många fler konfigurationsalternativ! Webbplatser har många funktioner, var och en med sina egna konfigurationer.

Dessa funktioner faller under tre rubriker i IIS-hanteraren:

  • ASP.NET (om du har det installerat)
  • IIS
  • Hantering

Kontextmenyn

Du kan växla mellan ”Funktioner” och ”Innehåll” när du har en webbplats vald. Du kan högerklicka på webbplatsen och öppna mappen från kontextmenyn genom att välja ”Utforska”. Det finns andra saker du kan göra från den här kontextmenyn, till exempel redigera behörigheter.

Detta visar egentligen bara egenskaperna för platsens mapp. Därifrån måste du byta till fliken ”Säkerhet” för att faktiskt redigera behörigheterna.

Typiskt för Windows finns det flera andra sätt att redigera behörigheter. Se dina favoritwebbplatser för Windows-hjälp om du vill ha mer information om hur du ställer in mappbehörigheter.

Du kan utföra flera vanliga uppgifter från kontextmenyn. I objektet ”Hantera webbplats” kan du starta och stoppa webbplatsen, öppna den i webbläsaren och gå till avancerade inställningar. Vi kommer definitivt att vilja titta på dessa, men först ska vi prata om vad du ser när du väljer ”Redigera bindningar…”, som också finns i fönstret ”Åtgärd” som ”Bindningar…”.

Bindningar

Du måste lägga till en webbplatsbindning i dialogrutan ”Bindningar…” om du aktiverar HTTPS för din webbplats. Du kan också ange värdnamn och portnummer där. Om du har ytterligare bindningar för din webbplats kan du lägga till dem här också. Kanske använder du bindningarna net.tcp eller net.pipe (om du har lagt till funktionerna på servern och aktiverat dem för webbplatsen). Eller så kan du ange en IP-adress här.

Det är möjligt att köra mer än en webbplats som lyssnar på samma port. För att göra detta använder du olika värdnamn. Du kan till exempel ha admin.example.com bunden till din administratörswebbplats och blog.example.com bunden till din blogg. All trafik från example.com skulle gå till samma IP-adress (lastbalanseringsserver/server), men IIS skulle använda värdhuvudet för att styra trafiken till rätt webbplats. Dessa är också användbara för white label-applikationer: acme.example.com, foo.example.com, bar.example.com.

Grundläggande inställningar

”Grundläggande inställningar…” är samma dialogruta som du får när du konfigurerar webbplatsen för första gången. Du behöver förmodligen inte gå dit om du inte vill ändra programpoolen eller platsen för webbplatsen eller om du vill ansluta som en annan användare än IUSR (pass thru). Om du behöver använda ett tjänstekonto för att komma åt platskatalogen kan du välja ”Anslut som…” i dialogrutan ”Redigera webbplats”.

Anmärkningar: du bör se till att säkra alla kataloger som du använder i IIS. Du kan med fördel läsa om hur standardkatalogen inetpub säkras.

Undersidor och virtuella kataloger

Du kan vara värd för flera program och virtuella kataloger under en webbplats. Program kan köras i egna programpooler, men det kan inte virtuella kataloger. Som visas nedan har jag konfigurerat ett administratörsprogram och en virtuell bloggkatalog under Site2. De kan nås med hjälp av http://localhost/admin och http://localhost/blog. Båda svarar med inbyggda felsidor om det inte finns något i katalogerna.

Källkatalogerna för underprogram och virtuella kataloger behöver inte vara underkataloger till den överordnade webbplatsen. Du kan ha dessa kataloger var du vill. Du kanske vill mappa vissa vanliga webbresurser (bilder eller JS-filer) till en relativ sökväg för flera webbplatser. Virtuella kataloger är perfekta för detta.

Standard- och feldokument

När en användare besöker roten till din webbplats (www.example.com/) visas ett standarddokument. Standarddokumenten visas nedan. Du kan lägga till egna dokument, ta bort dokument eller inaktivera dem helt och hållet. Om du inaktiverar dem kommer användaren att få en ful 403-felskärm om du inte har gett tillstånd att lista mappinnehållet (rekommenderas inte). Det är bäst att ha ett standarddokument på plats.

Jag har lagt in ett indexdokument i varje katalog: webbplatsen, programmet och den virtuella katalogen.

  • Site2
    • Admin
      • index.html
    • Blogg
      • index.html
    • index.html
  • http://localhost/ laddar standarddokumentet på Site2/index.html
  • http://localhost/admin/ laddar standarddokumentet på Site2/Admin/index.html
  • http://localhost/blog/ laddar standarddokumentet på Site2/Blogg/index.html

Om du oroar dig för att IIS ska ta upp minne och processorer på din dator, så gör det inte. Om inte arbetsprocesserna körs (och hanterar förfrågningar med tunga bearbetningar), så är den inaktiv. Om du ser hög CPU-användning kan den här felsökningsguiden hjälpa dig, förutsatt att du använder ASP.NET.

CLI och fjärrhantering

AppCmd.exe

AppCmd är det inbyggda CLI-verktyget för att konfigurera och hantera IIS. Du kan använda det för att skapa webbplatser och apppooler, länka virtuella kataloger och redigera konfigurationer. Låt oss titta på några saker som det kan göra.

För det första lägger du till %systemroot%\system32\inetsrv\ i din sökväg så att du kan köra appcmd från en kommandotolk på vilken plats som helst.

Kör kommandotolken som administratör.

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

Att prova följande kommandon för att utforska appcmd:

  • Kör appcmd /? för att se hjälptexten
  • Se vilka appar som körs med appcmd list app
  • Använd appcmd list backup för att se säkerhetskopior av din IIS-konfiguration

Add site

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

Lista nu appar igen. Du kommer inte att se den nya webbplatsen som du har lagt till eftersom den inte betraktas som en app. Om du går till det grafiska användargränssnittet och uppdaterar dina webbplatser kommer du att se den nya webbplatsen där, men den kommer att vara trasig. Vi måste lägga till en app med appcmd.

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

Detta kommer bara att lägga till appen på webbplatsen i roten. Den kommer att skapa en app som heter ”Dummy Site/”. Vi måste fortfarande länka appen till en virtuell katalog och sedan peka den till en fysisk sökväg.

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

Detta är det utförliga sättet att använda appcmd för att skapa en IIS-webbplats. Det finns ett enklare sätt.

The EZ way

Du kan spara många tangenttryckningar när du skapar webbplatsen om du ställer in parametern physicalPath i det första kommandot. Detta gör allt på en gång:

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

Men genom att känna till de andra kommandona får du en bättre uppfattning om hur en IIS-app verkligen fungerar under huven. Tidigare har jag använt appcmd i skriptet efter byggandet av ASP.NET proj-filer för att se till att webbplatsen konfigurerades lokalt på nya utvecklarmaskiner. Du kan också göra en säkerhetskopiering och återställning av IIS-konfigurationen med appcmd.

Distribution av uppdateringar

För att ge dig ytterligare en idé om hur du kan använda appcmd kan du överväga att göra följande:

  1. Skapa en ”sites”-mapp.
  2. Skapa en undermapp för varje webbplats.
  3. Leverera versioner till undermappar under var och en av dessa.
  4. Sätt upp nya versioner.
  5. Använd appcmd för att uppdatera webbplatsen så att den använder den nya mappen.

Givet en app med namnet ”Hello World” som pekar på C:\Sites\HelloWorld\1.0.0 och en ny build ”1.0.1” som har lagts upp i C:\Sites\HelloWorld\1.0.1 , när det är dags att gå live kan du använda följande kommando för att ändra webbplatsen till den nya versionen:

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

Och om du behöver backa tillbaka webbplatsen kör du följande:

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

Här finns en bra guide från Microsoft med mer information om hur du använder AppCmd.

IIS reset

”iisreset” är en separat körbar fil som används för att stoppa, starta, starta om IIS eller för att starta om datorn (/REBOOT). Du kan ge den en parameter ”computername” för att få den att styra IIS på en annan dator. Du måste köra den som administratör. Många utvecklare och systemadministratörer gillar att använda detta efter en driftsättning, och det är inte heller någon dålig idé!

PowerShell

PowerShell har en kraftfull uppsättning verktyg för att hantera IIS. Du kan också skicka kommandot iisreset på distans med hjälp av Invoke-Command -ComputerName ”computername” -ScriptBlock {iisreset}, förutsatt att du tillåter fjärrkommandoanrop av godtyckliga kommandon på dina servrar – och det är generellt sett ingen bra idé!

Trots mina egna säkerhetsbekymmer när det gäller att skicka godtyckliga fjärrkommandon med hjälp av PowerShell är IIS-administrations-cmdletten verkligen användbar för webbserveradministration i DevOps-stil. Du kan kolla den här dokumentationen för IIS-administration med PowerShell för att få en uppfattning om vad den kan göra.

Slutar ner

Trots alla funktioner, konfigurationer och kommandon som vi har behandlat i det här inlägget har vi bara skrapat på ytan. Varje funktion har sina egna konfigurationer och det finns många tillägg som kan läggas till genom att installera tillägget Web Platform Installer.

Och med det, låt oss avsluta det här inlägget och IIS-servern:

iisreset /stop

Med APM, serverhälsomätningar och integrering av felloggar kan du förbättra din applikations prestanda med Stackify Retrace. Prova din kostnadsfria tvåveckors testversion idag

Lämna ett svar

Din e-postadress kommer inte publiceras.