Hvad er IIS?
I dette indlæg vil vi se nærmere på IIS (Internet Information Services). Vi vil se på, hvad det gør, og hvordan det fungerer. Du lærer, hvordan du aktiverer det på Windows. Og efter at vi har etableret en baseline med at administrere IIS ved hjælp af GUI’en, vil du se, hvordan du kan arbejde med den ved hjælp af CLI’en. Lad os komme i gang!
Hvad er en IIS-webserver?
En IIS-webserver kører på Microsoft .NET-platformen på Windows-operativsystemet. Det er muligt at køre IIS på Linux og Mac-computere ved hjælp af Mono, men det anbefales ikke, og det vil sandsynligvis være ustabilt. (Der er andre muligheder, som jeg vil præsentere senere). Det er alsidigt og stabilt, og det har været meget anvendt i produktion i mange år. Version 10 er den mest aktuelle. Når den er installeret, vil du se denne velkomstside i din browser. “Tervetuloa!”
Men inden vi går i dybden med IIS, skal vi starte med at definere en webserver i generel forstand.
Hvad er en webserver?
Internettet er godt. Og internettet kan ikke eksistere uden webservere. Men hvad er en webserver egentlig? Lad os definere det abstrakt, så vi kan få noget kontekst for, hvordan IIS udfylder denne rolle.
En webserver er en proces til hosting af webapplikationer. Webserveren gør det muligt for et program at behandle meddelelser, der ankommer via bestemte TCP-porte (som standard). Standardporten for HTTP-trafik er f.eks. 80, og den for HTTPS er 443.
Når du besøger et websted i din browser, angiver du typisk ikke portnummeret, medmindre webserveren er konfigureret til at modtage trafik på andre porte end standardportene. Hvis du besøger http://www.example.com, sendes din anmodning implicit til port 80. Du kan angive portnummeret, hvis du ønsker http://www.example.com:80, og https://www.example.com:443 til TLS (Transport Layer Security).
Hvis standardkonfigurationen og TLS er konfigureret for dit webprogram, vil webserveren modtage al indgående trafik til port 80 og 443. Det afhænger af, hvad webserveren gør med trafikken derfra. Der er utallige muligheder for, hvordan webserveren kan behandle disse anmodninger.
Hvordan håndterer IIS webanmodninger?
De to vigtigste procesmodeller for webservere er enten at håndtere alle anmodninger på en enkelt tråd eller at skabe en ny tråd for hver anmodning. Selv om modellen med en enkelt tråd (Node.js, f.eks.) har nogle arbejdstråde til rådighed, bruges de typisk kun til visse former for arbejde, f.eks. adgang til filsystemet. Den thread-per-request-model, som IIS (og dens letvægtsfætter IIS Express) bruger, henter en tråd fra en trådpulje for hver anmodning.
Webservere håndterer typisk anmodninger ved hjælp af et request-response-mønster. Klienten sender en anmodning og modtager et svar, hvis alt går godt. HTTP-protokollen er det allestedsnærværende valg, når der kommunikeres mellem en klient og en webserver over internettet.
Funktioner
IIS er rig på funktioner. IIS bruges oftest til at være vært for ASP.NET-webapplikationer og statiske websteder. Den kan også bruges som FTP-server, hoste WCF-tjenester og udvides til at hoste webapplikationer, der er bygget på andre platforme som f.eks. PHP.
Der er indbyggede godkendelsesmuligheder som Basic, ASP.NET og Windows auth. Sidstnævnte er nyttig, hvis du har et Windows Active Directory-miljø – brugere kan automatisk blive logget ind i webapplikationer ved hjælp af deres domænekonto. Andre indbyggede sikkerhedsfunktioner omfatter administration og binding af TLS-certifikater til aktivering af HTTPS og SFTP på dine websteder, anmodningsfiltrering til whitelisting eller blacklisting af trafik, autorisationsregler, logning af anmodninger og et omfattende sæt af FTP-specifikke sikkerhedsindstillinger.
En vigtig funktion i IIS er programpuljen. Vi bliver nødt til at se nærmere på programpuljen, da den er en vigtig komponent i IIS-procesmodellen.
En uvurderlig funktion er fjernadministration. IIS kan også administreres via CLI’en eller ved hjælp af PowerShell. Du kan scripte alt, hvilket er fantastisk, hvis du kan lide den magt, der følger med at kunne gøre det.
Nu burde du have et godt indtryk af konfigurerbarheden og alsidigheden i IIS. Du bør også være klar over, at det kan udvides til at tjene (med ordspil) mange andre formål end at hoste ASP.NET-apps. Gennem udvidelse bliver IIS til en meget alsidig og stabil webserver til Windows-platformen. Lad os tage et kig på, hvordan du installerer IIS på Windows 10. (Den samme proces gælder for Windows 7 og 8.)
Sæt IIS op
Det ville være lidt meget at kalde det at “installere”. IIS er trods alt en funktion i Windows. Det, du i virkeligheden skal gøre, er at aktivere funktionen. I Windows 10 kan du trykke på Windows-tasten og skrive “turn win.” Du bør se “Turn Windows features on or off.”
Vælg det for at åbne dialogboksen “Windows-funktioner”. Herfra kan du slå alle mulige ekstra funktioner til, herunder PowerShell 2.0, et dybt mappetræ med muligheder for Internet Information Services (IIS) og et undersystem til Linux. (Jeg må sige, at det sidste har været praktisk for mig adskillige gange, f.eks. når en Node-app har nogle shell-scripts som en del af npm-bygningen).
Optionen Internet Information Services (IIS) er den, vi vil have!
Det er et godt udgangspunkt, hvis du blot klikker på feltet for den. Det kan dog være, at du ønsker at grave dybere. World Wide Web Services > Application Development Features er der, hvor du aktiverer ASP.NET, CGI og WebSocket-protokollen. Du kan altid vende tilbage til dette, hvis du har brug for at foretage justeringer.
For at aktivere IIS på Windows Server kan du enten bruge PowerShell eller Server Manager til at installere “Web Role (IIS)”. Se denne gennemgang for at få flere oplysninger.
Når du har valgt alle de ønskede IIS-funktioner, skal du klikke på OK og gå ud og hente en frisk kop kaffe. Når installationen er færdig, kan du få adgang til IIS GUI ved at skrive “IIS” i Windows-søgningen eller ved at køre “inetmgr.”
GUI’en
Hvor vi går i detaljer, vil jeg give dig en hurtig introduktion til IIS Manager. Jeg har fremhævet de områder, der er af interesse, fordi denne ting er sådan et rod. Det kræver lidt tilvænning, men der er et par ting, jeg kan tilbyde at hjælpe med, når det drejer sig om at komme rundt herinde.
Først af alt er der tre ruder. Den venstre har de tilsluttede servere. (Du kan også oprette forbindelse til fjernservere.) Den midterste rude er der, hvor du finder alle funktioner som programsikkerhed, logning, filtrering og omdirigering. Eller når du vælger “Content View” (indholdsvisning), ser du indholdet her i midten i stedet. Til højre er ruden med handlinger. Denne ændrer sig afhængigt af den valgte kontekst.
Jeg er ikke sikker på, hvorfor det lille ekstra ikon nederst til højre er der, men du kan også ændre størrelsen på vinduet dernede.
TIP: Du kan højreklikke på de fleste af ikonerne og bruge kontekstmenuen til at udføre de mest almindelige handlinger.
Hvis du udvider “forbindelse” i ruden forbindelser, bør det første, du ser, være “Application Pools”, efterfulgt af “Sites”. Vi vil fokusere på disse i de næste to afsnit.
Applikationspuljer… Hvad er de, og hvordan fungerer de?
Her er et kig på de applikationspuljer, der er konfigureret som standard i IIS. Som du kan se, er der kombinationer af v2.0 og v4.0 og af klassisk og integreret.
Den integrerede pipeline adskiller sig fra den klassiske pipeline ved, at ASP.NET er integreret i IIS’ anmodningspipeline. I den klassiske tilstand skulle anmodninger passere gennem en pipeline for IIS og en anden for ASP.NET. Integreret har været den foretrukne tilstand, siden IIS 7 blev frigivet med Windows Server 2008 og Vista. Brug ikke classic, medmindre du er nødt til det. Det samme gælder for v2.0. De er kun til legacy support. Hvis du ikke har brug for disse programpools, kan du faktisk lige så godt bare fjerne dem. Vi har ikke brug for at have noget rod hængende!
En enkelt applikationspool har nul til mange arbejdsprocesser (w3wp.exe) kørende på et givent tidspunkt. Arbejdsprocesserne kører instanser af dit program.
Skabelse af programpuljer
I ruden “Handlinger” i højre side af IIS-vinduet skal du klikke på “Tilføj programpulje…” for at få dialogboksen frem. Det er ret ligetil. Du kan normalt bare indtaste et navn og trykke på “enter” eller klikke på “OK.”
Du kan også tilføje en applikationspool ved at højreklikke på noden “Application Pools” i ruden “Connections” (forbindelser). Tippet fra tidligere beviser allerede nu sin værdi!
App pool users
IIS opretter en virtuel bruger for hver app pool (almindelig nomenklatur for applikationspulje). Disse arbejdsprocesser kører som standard som app-puljens virtuelle bruger. De kan køre som en anden bruger (f.eks. en domænekonto), hvis de har brug for særlige tilladelser.
Selv om jeg har fjernet app-puljerne fra serveren, lever de virtuelle brugere videre!
Disse virtuelle brugere får stadig deres egne standardmapper, f.eks. “Skrivebord”, “Musik” og “Billeder”. De optager ikke så meget plads (110 MB), men når app-puljen er fjernet, er disse brugermapper ubrugelige og kan slettes.
App-pulje-genbrug
En vigtig funktion ved app-puljer er genbrug. Som standard genbruges app-puljer hvert 1740 minut (29 timer), og når konfigurationsfilen ændres. Du kan konfigurere genbrug, så det passer til dine behov. Genbrug af app-puljer frigør den hukommelse, der forbruges af programmer, der kører i en app-pulje. Genbrug kan forhindre, at løbske processer tygger al hukommelsen på din server.
Hvilke slags ting bruger hukommelse i din proces? Alt på stakken og heap-statiske variabler og egenskaber, alt i hukommelsescachen, alle objekter, der refereres af et andet objekt, alle blokke af hukommelse, der venter på at blive skraldet, du får billedet.
Du kan vælge, hvilke hændelser du ønsker at logge (eller ikke logge). Som du kan se, er ikke alle muligheder vist i den foregående dialogboks – “Runtime recycling events” ser ikke ud til at kunne konfigureres. Dette er ikke helt sandt.
En genbrug starter en ny proces og spinner derefter den aktuelle proces ned. Den nye proces vil, som man kan forvente, have et nyt PID. Du kan ændre denne adfærd samt anden genbrugsadfærd i “Avancerede indstillinger…”. Faktisk kan du redigere alle genbrugskonfigurationer i denne menu. Dialogboksen “Recycling…” er overflødig i den henseende. Du kan dog slå genbrug fra for konfigurationsændringer her. Det har du dog sandsynligvis ikke lyst til. Din kørende app ville ikke få konfigurationsopdateringerne.
Bemærk, at “overlappende genbrug” indebærer, at det er muligt at have mere end én instans af programmet. Du bør kun deaktivere dette, hvis dit program kræver det. Overlapped recycle forhindrer forstyrrelser, der ville opstå, hvis recycle ventede på, at den aktuelle proces tømte anmodninger, før den nye proces startes. Med andre ord ville ingen nye anmodninger blive håndteret, før de aktuelle anmodninger er afsluttet, eller den konfigurerbare timeout-periode er udløbet (90 sekunder som standard).
Advanced Configuration
Der er alt for mange app pool-konfigurationer til at gentage dem i detaljer i dette indlæg. Indtil videre må en kort oversigt være nok. Jeg vil hurtigt rasle nogle punkter op om hvert af områderne i “Avancerede indstillinger”, som vist nedenfor.
- Indstillingen “Generelt” giver dig mulighed for at
- Ændre .NET CLR-versioner
- Tillad 32-bit-programmer
- Optionen “Pipeline-tilstand” dækker
- Sæt kø-længde (1000 anmodninger som standard)
- Sæt til at køre altid eller efter behov
- Indstillingen “CPU” dækker
- Drossling
- Processoraffinitet
- “Procesmodel” vil lade dig vælge indstillinger for
- Identitet
- Idle timeout
- Max arbejderprocesser
- Sundhedsovervågning (Du bør slå dette fra lokalt til fejlfinding, fordi en stoppet debugger ikke vil svare på ping)
- “Process Orphaning” er nyttig til fejlfinding af processer, der ikke reagerer
- “Rapid-Fail Protection” er god til, når du vil konfigurere load balancer-svar på fejl
Sites
“Sites” er knuden ved siden af “Application Pools” i serverknuden i IIS Manager. Det er her, at du tilføjer og administrerer websteder og FTP-steder (hvis de er installeret). Mens programpools har en dialogboks med avancerede indstillinger, har websteder mange flere konfigurationsmuligheder! Sites har mange funktioner med hver deres egen konfiguration.
Disse funktioner falder under tre overskrifter i IIS manager:
- ASP.NET (hvis du har det installeret)
- IIS
- Administration
Kontekstmenu
Du kan skifte mellem “Funktioner” og “Indhold”, når du har valgt et site. Du kan højreklikke på webstedet og åbne mappen fra kontekstmenuen ved at vælge “Udforsk”. Der er andre ting, du kan gøre fra denne kontekstmenu, f.eks. redigere tilladelser.
Dette viser faktisk bare egenskaberne for webstedets mappe. Derfra skal du skifte til fanen “Sikkerhed” for rent faktisk at redigere tilladelserne.
Typisk for Windows er der flere andre måder, hvorpå du kan redigere tilladelser. Se dine foretrukne Windows-hjælpesider for at få flere oplysninger om, hvordan du indstiller mappetilladelser.
Du kan udføre flere almindelige opgaver fra kontekstmenuen. Inde under punktet “Administrer websted” kan du starte og stoppe webstedet, åbne det i din browser og gå til avancerede indstillinger. Vi vil helt sikkert se på disse, men lad os først tale om, hvad du får at se, når du vælger “Rediger bindinger…”, som også er tilgængelig i ruden “Handling” som “Bindinger…”.
Bindinger
Du skal tilføje en stedbinding i dialogboksen “Bindinger…”, hvis du aktiverer HTTPS for dit websted. Du kan også indstille værtsnavnet og portnumrene der. Hvis du har yderligere bindinger for dit websted, kan du også tilføje dem her. Måske bruger du net.tcp- eller net.pipe-bindinger (hvis du har tilføjet funktionerne på serveren og aktiveret dem for webstedet). Eller du kan angive en IP-adresse her.
Det er muligt at køre mere end ét websted, der lytter på den samme port. For at gøre dette skal du bruge forskellige værtsnavne. Du kan f.eks. have admin.example.com bundet til dit administrationswebsted og blog.example.com bundet til din blog. Al trafik fra example.com ville gå til den samme IP (load-balancer/server), men IIS ville bruge værtsheaderen til at lede trafikken til det relevante websted. Disse er også nyttige til white-label-apps: acme.example.com, foo.example.com, bar.example.com.
Grundlæggende indstillinger
“Grundlæggende indstillinger…” er den samme dialogboks, som du får, når du først opretter webstedet. Du behøver sandsynligvis ikke at gå derhen, medmindre du vil ændre programpuljen eller placeringen af webstedet, eller hvis du vil oprette forbindelse som en anden bruger i stedet for IUSR (pass thru). Hvis du har brug for at bruge en tjenestekonto til at få adgang til stedets mappe, kan du vælge “Tilslut som…” i dialogboksen “Rediger websted”.
OBS: Du skal sørge for at sikre alle mapper, du bruger i IIS. Du kan med fordel læse om, hvordan standardmappen inetpub er sikret.
Subwebsteder og virtuelle mapper
Du kan være vært for flere programmer og virtuelle mapper under ét websted. Programmer kan køre i deres egne programpuljer, men virtuelle mapper kan ikke køre i deres egne programpuljer, men det kan virtuelle mapper ikke. Som vist nedenfor har jeg oprettet et administrationsprogram og en virtuel blogmappe under Site2. De kan tilgås ved hjælp af http://localhost/admin og http://localhost/blog. Begge vil svare med indbyggede fejlsider, medmindre der er noget i mapperne.
Kildemapperne for underapplikationer og virtuelle mapper behøver ikke at være undermapper til det overordnede websted. Du kan opbevare disse mapper hvor som helst, du ønsker det. Du ønsker måske at mappe nogle almindelige webressourcer (billeder eller JS-filer) til en relativ sti for flere websteder. Virtuelle mapper er perfekte til dette.
Standard- og fejldokumenter
Når en bruger besøger roden af dit websted (www.example.com/), får han/hun vist et standarddokument. Standarddokumenterne er vist nedenfor. Du kan tilføje dine egne dokumenter, fjerne dokumenter eller deaktivere dem helt og holdent. Hvis du deaktiverer dem, vil brugeren få en grim 403-fejlskærm, medmindre du har givet tilladelse til at liste mappeindholdet (anbefales ikke). Det er bedst at have et standarddokument på plads.
Jeg har lagt et indeksdokument i hver mappe: webstedet, programmet og den virtuelle mappe.
- Site2
- Admin
- index.html
- Blog
- index.html
- index.html
- Admin
- http://localhost/ indlæser standarddokumentet på Site2/index.html
- http://localhost/admin/ indlæser standarddokumentet på Site2/Admin/index.html
- http://localhost/blog/ indlæser standarddokumentet på Site2/Blog/index.html
Hvis du er bekymret for, at IIS optager hukommelse og CPU på din maskine, skal du ikke gøre det. Medmindre arbejdsprocesserne kører (og håndterer anmodninger med tung behandling), sidder den ubenyttet hen. Hvis du ser et stort CPU-forbrug, kan denne vejledning til fejlfinding hjælpe dig, forudsat at du bruger ASP.NET.
CLI og fjernadministration
AppCmd.exe
AppCmd er det indbyggede CLI-værktøj til konfiguration og administration af IIS. Du kan bruge det til at oprette websteder og app-pools, sammenkæde virtuelle mapper og redigere konfigurationer. Lad os se på et par ting, det kan gøre.
Først og fremmest skal du tilføje %systemroot%\system32\inetsrv\ til din sti, så du kan køre appcmd fra en kommandoprompt på et hvilket som helst sted.
Kør kommandoprompten som administrator.
setx PATH "%PATH%;%systemroot%\system32\inetsrv\"
Afprøv følgende kommandoer for at udforske appcmd:
- Kør appcmd /? for at få vist hjælpeteksten
- Se hvilke apps der kører med appcmd list app
- Brug appcmd list backup for at få vist sikkerhedskopier af din IIS-konfiguration
Add site
appcmd add site /name:"Dummy Site" /id:10 /bindings:http/*:81:
Opnå listen over apps igen. Du vil ikke se det nye websted, du har tilføjet, fordi det ikke betragtes som en app. Hvis du går til GUI’en og opdaterer dine websteder, vil du se det nye websted der, men det vil være ødelagt. Vi skal tilføje en app ved hjælp af appcmd.
appcmd add app /site.name:"Dummy Site" /path:"/"
Dette vil kun tilføje appen til webstedet på roden. Den vil oprette en app med navnet “Dummy Site/”. Vi skal stadig knytte appen til en virtuel mappe og derefter pege den til en fysisk sti.
appcmd add vdir /app.name:"Dummy Site/" path:"/"appcmd set vdir "Dummy Site/" /physicalPath:"c:\inetpub\wwwroot"
Dette er den udførlige måde at bruge appcmd til at oprette et IIS-sted på. Der er en nemmere måde.
Den EZ-måde
Du kan spare en masse tastetryk, mens du opretter webstedet, hvis du indstiller parameteren physicalPath i den første kommando. Dette vil gøre det hele på én gang:
appcmd add site /name:"Dummy Site" /id:10 /bindings:http/*:81: /physicalPath:"c:\inetpub\wwwroot"
Men ved at kende de andre kommandoer får du et bedre indblik i, hvordan en IIS-app virkelig fungerer under motorhjelmen. Tidligere har jeg brugt appcmd i postbuild-scriptet for ASP.NET proj-filer for at sikre, at webstedet blev oprettet lokalt på nye udviklermaskiner. Du kan også lave en sikkerhedskopi og gendannelse af IIS-konfigurationen ved hjælp af appcmd.
Deployering af opdateringer
For at give dig endnu en idé om brugen af appcmd kan du overveje at gøre følgende:
- Opret en “sites”-mappe.
- Opret en undermappe for hvert websted.
- Deployer versioner til undermapper under hver af disse.
- Sæt nye versioner i scene.
- Brug appcmd til at opdatere webstedet til at bruge den nye mappe.
Giv en app med navnet “Hello World”, der peger på C:\Sites\HelloWorld\1.0.0 og et nyt build “1.0.1”, der er blevet staged i C:\Sites\HelloWorld\1.0.1 , kan du, når det er tid til at gå live, bruge følgende kommando til at vende webstedet til den nye version:
appcmd set vdir "Dummy Site/" /physicalPath:"c:\Sites\HelloWorld.0.1"appcmd recycle apppool /apppool.name:defaultapppool
Og hvis du har brug for at rulle dit websted tilbage, skal du køre følgende:
appcmd set vdir "Dummy Site/" /physicalPath:"c:\Sites\HelloWorld.0.0"appcmd recycle apppool /apppool.name:defaultapppool
Her er en god vejledning fra Microsoft med flere oplysninger om brugen af AppCmd.
IIS reset
“iisreset” er en separat eksekverbar fil, der bruges til at stoppe, starte, genstarte IIS eller begivenhed for at genstarte computeren (/REBOOT). Du kan give den en “computername”-parameter for at få den til at styre IIS på en anden computer. Du skal køre den som administrator. Mange udviklere og systemadministratorer kan lide at bruge dette efter en implementering, og det er heller ikke nogen dårlig idé!
PowerShell
PowerShell har et kraftfuldt sæt værktøjer til administration af IIS. Du kan også sende kommandoen iisreset eksternt ved hjælp af Invoke-Command -ComputerName “computername” -ScriptBlock {iisreset}, forudsat at du tillader fjernkommandoindkaldelse af vilkårlige kommandoer på dine servere – og det er generelt ikke en god idé!
Trods mine egne sikkerhedsmæssige betænkeligheder ved at sende vilkårlige fjernkommandoer ved hjælp af PowerShell er IIS-administrations-cmdletten virkelig nyttig til webserveradministration i DevOps-stil. Du kan tjekke denne dokumentation for IIS-administration ved hjælp af PowerShell for at få en idé om, hvad den kan gøre.
Sluk ned
Trods alle de funktioner, konfigurationer og kommandoer, vi har dækket i dette indlæg, har vi kun kradset i overfladen. Hver funktion har sine egne konfigurationer, og der er mange udvidelser, der kan tilføjes ved at installere Web Platform Installer-udvidelsen.
Og med det, lad os afslutte dette indlæg og IIS-serveren:
iisreset /stop
Med APM, servertilstandsmålinger og integration af fejllogfiler kan du forbedre din applikations ydeevne med Stackify Retrace. Prøv din gratis to ugers prøveperiode i dag