Obsah

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í:

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

Request Processing Pipeline

Zpracování požadavku prochází několika fázemi:

  1. HTTP.sys přijme požadavek na úrovni kernelu
  2. Požadavek je směrován do správného Application Pool
  3. Worker process (w3wp.exe) zpracovává požadavek
  4. HTTP modules zpracovávají různé aspekty (autentizace, komprese atd.)
  5. Handler generuje odpověď (ASP.NET, PHP, statický soubor)
  6. Odpověď je vrácena klientovi přes HTTP.sys

Application Pools

Application Pools jsou klíčovou vlastností pro izolaci aplikací:

<!-- applicationHost.config -->
<applicationPools>
    <add name="DefaultAppPool" 
         managedRuntimeVersion="v4.0" 
         managedPipelineMode="Integrated">
        <processModel identityType="ApplicationPoolIdentity" />
        <recycling>
            <periodicRestart time="1.22:00:00" />
        </recycling>
    </add>
</applicationPools>

Nastavení Application Pool:

Websites a Virtual Directories

Website

Základní jednotka v IIS:

Virtual Directory

Mapování URL cesty na fyzický adresář:

Application

Samostatná aplikace v rámci webu:

Bindings

Bindings definují, jak je web dostupný:

<site name="MojeStranky" id="1">
    <bindings>
        <binding protocol="http" bindingInformation="*:80:www.domena.cz" />
        <binding protocol="https" bindingInformation="*:443:www.domena.cz" />
        <binding protocol="http" bindingInformation="*:80:domena.cz" />
    </bindings>
</site>

Typy vazeb:

SSL/TLS certifikáty

IIS plně podporuje šifrované HTTPS připojení:

Požadavky na certifikát:

Autentizace

IIS podporuje různé metody autentizace:

<!-- web.config -->
<system.webServer>
    <security>
        <authentication>
            <anonymousAuthentication enabled="false" />
            <windowsAuthentication enabled="true" />
        </authentication>
    </security>
</system.webServer>

Autorizace a oprávnění

Řízení přístupu k obsahu:

HTTP Modules

Moduly rozšiřují funkcionalitu IIS:

Vestavěné moduly:

Moduly lze přidávat a odebírat podle potřeby:

<system.webServer>
    <modules>
        <remove name="WebDAVModule" />
        <add name="CustomModule" type="MyApp.CustomModule" />
    </modules>
</system.webServer>

HTTP Handlers

Handlers generují odpovědi pro specifické typy požadavků:

URL Rewrite

URL Rewrite Module umožňuje přepisování a přesměrování URL:

<system.webServer>
    <rewrite>
        <rules>
            <!-- Přesměrování na HTTPS -->
            <rule name="HTTP to HTTPS redirect" stopProcessing="true">
                <match url="(.*)" />
                <conditions>
                    <add input="{HTTPS}" pattern="off" />
                </conditions>
                <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" 
                        redirectType="Permanent" />
            </rule>
 
            <!-- Odstranění www -->
            <rule name="Remove WWW" stopProcessing="true">
                <match url="(.*)" />
                <conditions>
                    <add input="{HTTP_HOST}" pattern="^www\.(.+)$" />
                </conditions>
                <action type="Redirect" url="https://{C:1}/{R:0}" 
                        redirectType="Permanent" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

Možnosti URL Rewrite:

Request Filtering

Ochrana před útoky a nebezpečnými požadavky:

<system.webServer>
    <security>
        <requestFiltering>
            <requestLimits maxAllowedContentLength="52428800" 
                          maxUrl="4096" 
                          maxQueryString="2048" />
            <fileExtensions>
                <add fileExtension=".config" allowed="false" />
                <add fileExtension=".cs" allowed="false" />
            </fileExtensions>
            <verbs>
                <add verb="TRACE" allowed="false" />
            </verbs>
            <hiddenSegments>
                <add segment="App_Code" />
                <add segment="bin" />
            </hiddenSegments>
        </requestFiltering>
    </security>
</system.webServer>

Komprese

IIS podporuje kompresi pro snížení přenesených dat:

<system.webServer>
    <httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
        <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
        <staticTypes>
            <add mimeType="text/*" enabled="true" />
            <add mimeType="application/javascript" enabled="true" />
            <add mimeType="application/json" enabled="true" />
        </staticTypes>
        <dynamicTypes>
            <add mimeType="text/*" enabled="true" />
            <add mimeType="application/json" enabled="true" />
        </dynamicTypes>
    </httpCompression>
    <urlCompression doStaticCompression="true" doDynamicCompression="true" />
</system.webServer>

Caching

IIS nabízí několik úrovní cachování:

<system.webServer>
    <caching>
        <profiles>
            <add extension=".jpg" policy="CacheUntilChange" 
                 kernelCachePolicy="CacheUntilChange" />
            <add extension=".css" policy="CacheUntilChange" 
                 kernelCachePolicy="CacheUntilChange" />
        </profiles>
    </caching>
    <staticContent>
        <clientCache cacheControlMode="UseMaxAge" 
                     cacheControlMaxAge="7.00:00:00" />
    </staticContent>
</system.webServer>

Logging

IIS zaznamenává požadavky do log souborů:

Formáty logů:

Umístění logů (výchozí):

Log obsahuje:

Failed Request Tracing

FREB (Failed Request Event Buffering) pro diagnostiku problémů:

Použití:

  1. Povolit Failed Request Tracing pro web
  2. Definovat pravidla (status kód, časový limit)
  3. Analyzovat vygenerované XML logy

Application Initialization

Předehřátí aplikací pro rychlejší první požadavek:

<system.webServer>
    <applicationInitialization 
        doAppInitAfterRestart="true" 
        skipManagedModules="false">
        <add initializationPage="/" />
        <add initializationPage="/api/warmup" />
    </applicationInitialization>
</system.webServer>

V Application Pool:

WebSockets

IIS 8.0+ podporuje WebSocket protokol:

<system.webServer>
    <webSocket enabled="true" />
</system.webServer>

HTTP/2

IIS 10.0+ podporuje HTTP/2 protokol:

Správa IIS

IIS Manager

Grafické rozhraní pro správu:

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:

web.config

Konfigurační soubor pro konkrétní aplikaci:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <defaultDocument>
            <files>
                <clear />
                <add value="index.html" />
                <add value="index.htm" />
                <add value="default.aspx" />
            </files>
        </defaultDocument>
 
        <httpErrors errorMode="Custom">
            <remove statusCode="404" />
            <error statusCode="404" path="/404.html" responseMode="File" />
        </httpErrors>
 
        <httpProtocol>
            <customHeaders>
                <add name="X-Frame-Options" value="SAMEORIGIN" />
                <add name="X-Content-Type-Options" value="nosniff" />
            </customHeaders>
        </httpProtocol>
    </system.webServer>
</configuration>

Výkon a optimalizace

Tipy pro optimalizaci výkonu IIS:

Bezpečnost

Doporučení pro zabezpečení IIS:

<!-- Odstranění server headers -->
<system.webServer>
    <httpProtocol>
        <customHeaders>
            <remove name="X-Powered-By" />
        </customHeaders>
    </httpProtocol>
    <security>
        <requestFiltering removeServerHeader="true" />
    </security>
</system.webServer>

Load Balancing

IIS podporuje několik způsobů distribuce zátěže:

Web Farm

Web Farm – skupina IIS serverů:

Integrace s ASP.NET

IIS a ASP.NET úzce spolupracují:

V Integrated módu:

Monitoring a diagnostika

Nástroje pro monitorování IIS:

Důležité čítače:

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

  1. Ovládací panely → Programy → Zapnout nebo vypnout funkce systému Windows
  2. Zaškrtnout Internetová informační služba
  3. Vybrat potřebné komponenty (World Wide Web Services, ASP.NET atd.)
  4. OK a počkat na instalaci

Výhody a nevýhody

Výhody

Nevýhody

Související pojmy

Externí odkazy