====== IIS (Internet Information Services) ======
**IIS (Internet Information Services)** je webový server vyvinutý společností Microsoft pro operační systémy Windows Server a Windows. Jedná se o robustní platformu pro hostování webových stránek, webových aplikací a služeb.
===== Základní charakteristika =====
IIS je integrovanou součástí Windows a poskytuje kompletní prostředí pro provoz webových aplikací:
* **Webový server** – obsluha HTTP/HTTPS požadavků
* **FTP server** – přenos souborů
* **SMTP server** – odesílání emailů (starší verze)
* **Aplikační server** – spouštění [[ASP.NET]] a dalších aplikací
* **Management nástroje** – grafické rozhraní pro správu
===== Historie a verze =====
IIS prošel vývojem od jednoduchého webového serveru k komplexní platformě:
^ Verze ^ Rok ^ Windows ^ Klíčové vlastnosti ^
| IIS 1.0 | 1995 | Windows NT 3.51 | První verze |
| IIS 3.0 | 1996 | Windows NT 4.0 | ASP (Active Server Pages) |
| IIS 5.0 | 2000 | Windows 2000 | HTTP compression |
| IIS 6.0 | 2003 | Windows Server 2003 | Application pools, worker processes |
| IIS 7.0 | 2006 | Windows Server 2008, Vista | Modulární architektura |
| IIS 7.5 | 2009 | Windows Server 2008 R2, Windows 7 | WebDAV, FTP 7.5 |
| IIS 8.0 | 2012 | Windows Server 2012, Windows 8 | SNI, WebSockets |
| IIS 8.5 | 2013 | Windows Server 2012 R2, Windows 8.1 | Dynamic IP restrictions |
| IIS 10.0 | 2015 | Windows Server 2016/2019/2022, Windows 10/11 | HTTP/2, Nano Server |
===== Architektura IIS =====
Moderní IIS (verze 7+) používá modulární architekturu:
==== Hlavní komponenty ====
* **HTTP.sys** – kernel-mode driver pro zpracování HTTP požadavků
* **W3SVC (WWW Service)** – Windows služba řídící IIS
* **WAS (Windows Process Activation Service)** – správa worker procesů
* **Worker Processes (w3wp.exe)** – procesy pro běh aplikací
* **Application Pools** – izolované prostředí pro aplikace
==== Request Processing Pipeline ====
Zpracování požadavku prochází několika fázemi:
- **HTTP.sys** přijme požadavek na úrovni kernelu
- Požadavek je směrován do správného **Application Pool**
- **Worker process** (w3wp.exe) zpracovává požadavek
- **HTTP modules** zpracovávají různé aspekty (autentizace, komprese atd.)
- **Handler** generuje odpověď (ASP.NET, PHP, statický soubor)
- Odpověď je vrácena klientovi přes HTTP.sys
===== Application Pools =====
**Application Pools** jsou klíčovou vlastností pro izolaci aplikací:
* Každý pool běží ve vlastním worker procesu
* Pád jedné aplikace neovlivní ostatní
* Možnost nastavit různé identity a oprávnění
* Recycling – automatický restart pro obnovu zdrojů
Nastavení Application Pool:
* **Pipeline Mode** – Integrated (doporučeno) nebo Classic
* **.NET CLR Version** – verze [[CLR|.NET runtime]]
* **Identity** – účet pro běh aplikace
* **Recycling** – pravidla pro restart procesu
* **Resource limits** – omezení CPU a paměti
===== Websites a Virtual Directories =====
==== Website ====
Základní jednotka v IIS:
* Unikátní kombinace **IP adresy, portu a hostname**
* Každý web má svůj **fyzický adresář** (Document Root)
* Může obsahovat více **virtuálních adresářů** a **aplikací**
* Přiřazen k jednomu **Application Pool**
==== Virtual Directory ====
Mapování URL cesty na fyzický adresář:
* URL: `http://domena.cz/obrazky/` → Disk: `D:\Media\Images\`
* Umožňuje organizovat obsah mimo hlavní adresář webu
* Nedefinuje novou aplikaci
==== Application ====
Samostatná aplikace v rámci webu:
* Má vlastní konfiguraci (web.config)
* Může běžet v jiném Application Pool
* Má vlastní aplikační doménu
===== Bindings =====
**Bindings** definují, jak je web dostupný:
Typy vazeb:
* **HTTP** – standardní nešifrovaná komunikace (port 80)
* **HTTPS** – šifrovaná komunikace pomocí SSL/TLS (port 443)
* **FTP** – přenos souborů
* **Custom** – vlastní protokoly
===== SSL/TLS certifikáty =====
IIS plně podporuje šifrované HTTPS připojení:
* **Server certificates** – certifikáty pro identifikaci serveru
* **Client certificates** – autentizace klientů pomocí certifikátů
* **SNI (Server Name Indication)** – více SSL certifikátů na jedné IP
* **Centralized SSL** – sdílené úložiště certifikátů
* **Let's Encrypt** – integrace s automatickými certifikáty
Požadavky na certifikát:
* Vydán důvěryhodnou certifikační autoritou (CA)
* Platný pro dané doménové jméno
* Nainstalován v Certificate Store ve Windows
===== Autentizace =====
IIS podporuje různé metody autentizace:
* **Anonymous** – žádná autentizace (výchozí)
* **Basic** – username/password v plaintext (nutné HTTPS)
* **Digest** – hash-based autentizace
* **Windows Authentication** – integrace s Active Directory (NTLM, Kerberos)
* **Forms Authentication** – vlastní přihlašovací formuláře ([[ASP.NET]])
* **Client Certificate** – autentizace pomocí certifikátů
===== Autorizace a oprávnění =====
Řízení přístupu k obsahu:
* **NTFS permissions** – oprávnění na úrovni souborového systému
* **URL Authorization Rules** – pravidla na základě URL
* **IP Address Restrictions** – povolení/blokování IP adres
* **Request Filtering** – filtrování nebezpečných požadavků
===== HTTP Modules =====
**Moduly** rozšiřují funkcionalitu IIS:
Vestavěné moduly:
* **StaticFileModule** – obsluha statických souborů
* **DirectoryListingModule** – výpis obsahu adresářů
* **DefaultDocumentModule** – výchozí dokumenty (index.html)
* **HttpLoggingModule** – logování požadavků
* **CompressionModule** – komprese odpovědí (gzip, brotli)
* **UrlRewriteModule** – přepisování URL (vyžaduje instalaci)
* **CustomErrorModule** – vlastní chybové stránky
* **AuthenticationModules** – různé typy autentizace
Moduly lze přidávat a odebírat podle potřeby:
===== HTTP Handlers =====
**Handlers** generují odpovědi pro specifické typy požadavků:
* **StaticFileHandler** – obrázky, CSS, JavaScript
* **ASPClassic** – klasické ASP stránky (.asp)
* **PageHandlerFactory** – [[ASP.NET]] Web Forms (.aspx)
* **SimpleHandlerFactory** – ASP.NET HTTP Handlers (.ashx)
* **WebServiceHandlerFactory** – ASMX webové služby
* **ExtensionlessUrlHandler** – ASP.NET MVC/Web API
* **PHPHandler** – PHP skripty (vyžaduje instalaci PHP)
===== URL Rewrite =====
**URL Rewrite Module** umožňuje přepisování a přesměrování URL:
Možnosti URL Rewrite:
* **Redirect** – přesměrování na jinou URL (301, 302)
* **Rewrite** – změna URL bez přesměrování
* **Custom Response** – vlastní HTTP odpověď
* **Abort Request** – zamítnutí požadavku
===== Request Filtering =====
Ochrana před útoky a nebezpečnými požadavky:
===== Komprese =====
IIS podporuje kompresi pro snížení přenesených dat:
* **Static compression** – komprese statických souborů (uloženo v cache)
* **Dynamic compression** – komprese dynamického obsahu (ASP.NET)
* **Gzip** – široce podporovaný formát
* **Brotli** – modernější, lepší komprese (IIS 10+)
===== Caching =====
IIS nabízí několik úrovní cachování:
* **Kernel-mode cache** – cache v HTTP.sys (nejrychlejší)
* **User-mode cache** – cache ve worker procesu
* **Output cache** – cache pro ASP.NET (web.config nebo kód)
===== Logging =====
IIS zaznamenává požadavky do log souborů:
Formáty logů:
* **W3C Extended Log** – nejpoužívanější, konfigurovatelný
* **IIS Log** – Microsoft formát
* **NCSA Common Log** – kompatibilní s Apache
* **Custom** – vlastní formát
Umístění logů (výchozí):
* `C:\inetpub\logs\LogFiles\W3SVC1\` (číslo = ID webu)
Log obsahuje:
* Datum a čas požadavku
* IP adresu klienta
* HTTP metodu (GET, POST)
* URL a query string
* HTTP status kód
* User agent
* Referrer
* Bytes přeneseny
===== Failed Request Tracing =====
**FREB (Failed Request Event Buffering)** pro diagnostiku problémů:
* Detailní záznamy o požadavcích, které selžou nebo trvají dlouho
* Zachycení všech modulů a handlerů v pipeline
* XML soubory s detailními informacemi
* XSL pro vizualizaci v prohlížeči
Použití:
- Povolit Failed Request Tracing pro web
- Definovat pravidla (status kód, časový limit)
- Analyzovat vygenerované XML logy
===== Application Initialization =====
Předehřátí aplikací pro rychlejší první požadavek:
V Application Pool:
* Start Mode: **AlwaysRunning**
* Preload Enabled: **True**
===== WebSockets =====
IIS 8.0+ podporuje WebSocket protokol:
* Obousměrná komunikace přes jedno TCP spojení
* Nízká latence pro real-time aplikace
* Integrace s [[ASP.NET]] SignalR
===== HTTP/2 =====
IIS 10.0+ podporuje HTTP/2 protokol:
* Vyžaduje Windows Server 2016+ nebo Windows 10+
* Automaticky povoleno pro HTTPS připojení
* Multiplexing více požadavků přes jedno spojení
* Server push (experimentální)
* Header compression
===== Správa IIS =====
==== IIS Manager ====
Grafické rozhraní pro správu:
* **GUI aplikace** – spustitelná z nabídky Start nebo `inetmgr`
* **Hierarchická struktura** – server → websites → applications
* **Feature View** – konfigurace jednotlivých funkcí
* **Content View** – procházení souborů webu
* **Remote Management** – vzdálená správa serverů
==== PowerShell ====
Správa pomocí PowerShellu:
# Import IIS modulu
Import-Module WebAdministration
# Vytvoření nového webu
New-Website -Name "MujWeb" `
-PhysicalPath "C:\inetpub\wwwroot\mujweb" `
-Port 80 `
-HostHeader "www.mujweb.cz"
# Spuštění/zastavení webu
Start-Website -Name "MujWeb"
Stop-Website -Name "MujWeb"
# Vytvoření Application Pool
New-WebAppPool -Name "MujAppPool"
Set-ItemProperty IIS:\AppPools\MujAppPool `
-Name managedRuntimeVersion `
-Value "v4.0"
# Restart Application Pool
Restart-WebAppPool -Name "MujAppPool"
# Získání seznamu webů
Get-Website
# Nastavení binding
New-WebBinding -Name "MujWeb" `
-Protocol "https" `
-Port 443 `
-HostHeader "www.mujweb.cz" `
-SslFlags 1
==== AppCmd.exe ====
Příkazový řádek pro správu IIS:
REM Výpis všech webů
appcmd list site
REM Vytvoření webu
appcmd add site /name:MujWeb /physicalPath:C:\inetpub\wwwroot\mujweb /bindings:http/*:80:www.mujweb.cz
REM Zastavení webu
appcmd stop site "MujWeb"
REM Výpis Application Pools
appcmd list apppool
REM Recyklace Application Pool
appcmd recycle apppool "DefaultAppPool"
REM Export konfigurace
appcmd add backup "ZalohaKonfigurace"
REM Obnovení konfigurace
appcmd restore backup "ZalohaKonfigurace"
===== Konfigurace =====
IIS používá hierarchický konfigurační systém:
==== applicationHost.config ====
Hlavní konfigurační soubor pro celý server:
* Umístění: `%SystemRoot%\System32\inetsrv\config\applicationHost.config`
* Definuje globální nastavení IIS
* Application Pools
* Websites a jejich bindings
* Moduly a handlery
==== web.config ====
Konfigurační soubor pro konkrétní aplikaci:
* Umístěn v kořenovém adresáři webu/aplikace
* Dědí nastavení z applicationHost.config
* Může být v každém podadresáři (kaskádová konfigurace)
* Může být upravován bez administrátorských práv
===== Výkon a optimalizace =====
Tipy pro optimalizaci výkonu IIS:
* **Application Pool recycling** – nastavit rozumné intervaly
* **Output caching** – cache statického i dynamického obsahu
* **Compression** – povolit gzip/brotli kompresi
* **Static content cache** – nastavit cache headers
* **Connection limits** – omezit současná spojení
* **Request queue** – nastavit vhodnou velikost fronty
* **Disable unused modules** – odebrat nepotřebné moduly
* **Kernel-mode cache** – využít cache na úrovni kernelu
* **CDN** – použít pro statický obsah
===== Bezpečnost =====
Doporučení pro zabezpečení IIS:
* **Aktualizace** – pravidelně instalovat Windows Update
* **Least privilege** – minimální oprávnění pro Application Pool identity
* **HTTPS** – vždy používat pro citlivá data
* **Request filtering** – blokovat nebezpečné požadavky
* **Custom errors** – nezobrazovat detailní chyby v produkci
* **Directory browsing** – zakázat výpis adresářů
* **Remove headers** – skrýt verzi serveru
* **IP restrictions** – omezit přístup k admin rozhraním
* **Strong passwords** – silná hesla pro účty
* **Firewall** – povolit jen potřebné porty
===== Load Balancing =====
IIS podporuje několik způsobů distribuce zátěže:
* **ARR (Application Request Routing)** – reverzní proxy a load balancer od Microsoftu
* **NLB (Network Load Balancing)** – Windows funkce pro distribuci síťového provozu
* **Hardware load balancers** – dedikované zařízení (F5, Citrix NetScaler)
* **Cloud load balancers** – Azure Load Balancer, AWS ELB
===== Web Farm =====
**Web Farm** – skupina IIS serverů:
* Sdílená konfigurace – synchronizace web.config a applicationHost.config
* Sdílený obsah – UNC cesta nebo DFS
* Centralizovaný SSL – sdílené certifikáty
* Shared Configuration – exportovaná konfigurace na síťové cestě
===== Integrace s ASP.NET =====
IIS a [[ASP.NET]] úzce spolupracují:
* **Integrated Pipeline Mode** – ASP.NET moduly integrované do IIS pipeline (doporučeno)
* **Classic Pipeline Mode** – starý model, ASP.NET oddělen od IIS (kompatibilita)
V Integrated módu:
* ASP.NET moduly vidí všechny požadavky (i statické soubory)
* Lepší výkon a flexibilita
* Jednotný konfigurační model
===== Monitoring a diagnostika =====
Nástroje pro monitorování IIS:
* **Performance Monitor** – čítače výkonu (% CPU, Requests/sec, Connection Count)
* **IIS Logs** – analýza požadavků
* **Failed Request Tracing** – diagnostika problémů
* **Event Viewer** – systémové události a chyby
* **Process Explorer** – detailní informace o procesech
* **PerfView** – profilování výkonu
* **Application Insights** – monitoring v Azure
Důležité čítače:
* `Web Service\Current Connections`
* `ASP.NET\Requests Queued`
* `Process(w3wp)\% Processor Time`
* `Process(w3wp)\Private Bytes`
===== Porovnání s jinými webovými servery =====
^ Vlastnost ^ IIS ^ Apache ^ Nginx ^
| Platforma | Windows | Multi-platform | Multi-platform |
| Licence | Proprietární (součást Windows) | Open-source | Open-source |
| Konfigurace | GUI + XML | Textové soubory | Textové soubory |
| .NET podpora | Nativní | Pomocí Mono | Reverzní proxy |
| PHP podpora | FastCGI | Mod_php, FastCGI | FastCGI |
| Výkon | Velmi dobrý | Dobrý | Vynikající |
| Správa paměti | Application Pools | MPM moduly | Asynchronní |
===== Instalace IIS =====
==== Windows Server ====
# PowerShell - instalace role Web Server
Install-WindowsFeature -Name Web-Server -IncludeManagementTools
# Instalace ASP.NET 4.x
Install-WindowsFeature -Name Web-Asp-Net45
# Instalace URL Rewrite
# Stáhnout z: https://www.iis.net/downloads/microsoft/url-rewrite
==== Windows 10/11 ====
- Ovládací panely → Programy → Zapnout nebo vypnout funkce systému Windows
- Zaškrtnout **Internetová informační služba**
- Vybrat potřebné komponenty (World Wide Web Services, ASP.NET atd.)
- OK a počkat na instalaci
===== Výhody a nevýhody =====
==== Výhody ====
* **Integrace s Windows** – hluboká integrace s OS a Active Directory
* **Bezpečnost** – pravidelné bezpečnostní aktualizace
* **ASP.NET optimalizace** – nejlepší platforma pro ASP.NET aplikace
* **GUI správa** – přehledné grafické rozhraní
* **Application Pools** – izolace aplikací
* **Enterprise podpora** – podpora od Microsoftu
* **Stabilita** – osvědčený v enterprise prostředí
==== Nevýhody ====
* **Pouze Windows** – nelze použít na Linuxu
* **Licence** – vyžaduje Windows Server licenci
* **Uzavřený** – není open-source
* **Komplexita** – může být složitý pro začátečníky
* **Závislost** – úzká vazba na Windows ekosystém
===== Související pojmy =====
* [[ASP.NET]] – webový framework pro IIS
* [[.NET Framework]] – běhové prostředí
* [[Windows Server]] – serverový operační systém
* [[Active Directory]] – adresářová služba
* [[Kestrel]] – webový server pro ASP.NET Core
* [[Nginx]] – alternativní webový server
* [[Apache]] – alternativní webový server
===== Externí odkazy =====
* [[https://www.iis.net/|Oficiální stránky IIS]]
* [[https://learn.microsoft.com/cs-cz/iis/|Microsoft dokumentace k IIS]]
* [[https://forums.iis.net/|IIS fórum]]
* [[https://www.iis.net/downloads|Ke stažení pro IIS]] (moduly, extensions)