Implementace webového serveru v ASP.NET Core

Autoři: Tom Dykstra, Steve Smith, Stephen Halter a Chris Ross

Aplikace ASP.NET Core běží s implementací vnitroprocesového serveru HTTP. Implementace serveru naslouchá požadavkům HTTP a zpřístupní je aplikaci jako sadu funkcí požadavků sestavenou v HttpContext.

ASP.NET Core se dodává s těmito možnostmi:

Při použití služby IIS nebo IIS Express se aplikace spustí:

Modul ASP.NET Core je nativní modul služby IIS, který zpracovává nativní požadavky SLUŽBY IIS mezi službou IIS a vnitroprocesovým serverem HTTP služby IIS nebo serverem Kestrel. Další informace najdete v tématu Modul ASP.NET Core (ANCM) pro službu IIS.

Kestrel versus HTTP.sys

Kestrel má oproti HTTP.sys následující výhody:

  • Lepší výkon a využití paměti
  • Multiplatformní
  • Flexibilita (vyvíjí se a opravuje nezávisle na operačním systému)
  • Programová konfigurace protokolu TLS a portů
  • Rozšiřitelnost, která umožňuje protokoly jako PPv2 a alternativní přenosy

Http.Sys funguje jako sdílená komponenta režimu jádra s následujícími funkcemi, které Kestrel nemá:

Modely hostingu

K dispozici je několik modelů hostování:

  • Kestrel self-hosting: Kestrel Webový server běží bez nutnosti jakéhokoli jiného externího webového serveru, jako je SLUŽBA IIS nebo HTTP.sys.

  • Http.sys self-hosting je alternativou k Kestrel. Kestrel se doporučuje používat raději než HTTP.sys, pokud aplikace nevyžaduje funkce, které nejsou na serveru Kestrel dostupné.

  • Hostování v procesu služby IIS: Aplikace ASP.NET Core běží ve stejném procesu jako pracovní proces služby IIS. Hostování v procesu služby IIS poskytuje lepší výkon při hostování mimo proces služby IIS, protože požadavky nejsou přesměrované přes adaptér zpětné smyčky, síťové rozhraní, které vrací odchozí síťový provoz zpět na stejný počítač. Služba IIS zajišťuje správu procesů s využitím Aktivační služby procesů systému Windows (WAS).

  • Hostování mimo proces služby IIS: aplikace ASP.NET Core běží v procesu odděleně od pracovního procesu služby IIS a modul zpracovává správu procesů. Modul zahájí tento proces pro aplikaci ASP.NET Core při přijetí prvního požadavku a v případě vypnutí nebo selhání aplikaci restartuje. Jedná se v podstatě o stejné chování jako u aplikací, které běží vnitroprocesově a jsou spravované Aktivační službou procesů systému Windows (WAS). Použití samostatného procesu také umožňuje hostování více aplikací ze stejného fondu aplikací.

Další informace najdete v následujících článcích:

Kestrel

Server Kestrel výchozí multiplatformní implementace serveru HTTP. Kestrel poskytuje nejlepší výkon a využití paměti, ale nemá některé z pokročilých funkcí HTTP.sys. Další informace najdete v tomto dokumentu v části Kestrel versus HTTP.sys.

Kestrel použijte:

  • Samostatně jako hraniční server zpracovávající požadavky přímo ze sítě, včetně internetu.

    Kestrel communicates directly with the Internet without a reverse proxy server

  • S reverzním proxy serverem, jako je Internetová informační služba (IIS),Nginx nebo Apache. Reverzní proxy server přijímá požadavky HTTP z internetu a předává je do serveru Kestrel.

    Kestrel communicates indirectly with the Internet through a reverse proxy server, such as IIS, Nginx, or Apache

Podporuje se jakákoli konfigurace hostování – s reverzním proxy serverem i bez něj.

Pokyny Kestrel ke konfiguraci konfigurace a informace o tom, kdy se má použít Kestrel v konfiguraci reverzního proxy serveru, najdete Kestrel na webovém serveru v ASP.NET Core.

ASP.NET Core se dodává s těmito možnostmi:

Při použití služby IIS nebo IIS Express se serverem Kestrel aplikace běží v procesu odděleném od pracovního procesu služby IIS (mimoprocesově).

Vzhledem k tomu, že aplikace ASP.NET Core běží v procesu odděleném od pracovního procesu služby IIS, zajišťuje správu procesů modul. Modul zahájí tento proces pro aplikaci ASP.NET Core při přijetí prvního požadavku a v případě vypnutí nebo selhání aplikaci restartuje. Jedná se v podstatě o stejné chování jako u aplikací, které běží vnitroprocesově a jsou spravované Aktivační službou procesů systému Windows (WAS).

Následující diagram znázorňuje vztah mezi službou IIS, modulem ASP.NET Core a mimoprocesově hostovanou aplikací:

ASP.NET Core Module

Požadavky přijdou z webu do ovladače HTTP.sys v režimu jádra. Ovladač přesměruje požadavek do služby IIS na nakonfigurovaném portu webu, obvykle 80 (HTTP) nebo 443 (HTTPS). Modul předá požadavky na server Kestrel na náhodném portu dané aplikace mimo porty 80 a 443.

Modul tento port určí při spuštění prostřednictvím proměnné prostředí a middleware IIS Integration nakonfiguruje server tak, aby naslouchal na adrese http://localhost:{port}. Provedou se další kontroly a požadavky, které nepocházejí z tohoto modulu, se zamítnou. Modul nepodporuje předávání HTTPS, takže se požadavky předávají přes HTTP, i když je služba IIS přijme přes HTTPS.

Jakmile server Kestrel přijme požadavek z modulu, požadavek se odešle do kanálu middlewaru ASP.NET Core. Kanál middlewaru požadavek zpracuje a předá ho jako instanci HttpContext do logiky aplikace. Middleware přidaný integrací služby IIS aktualizuje schéma, vzdálenou IP adresu a základ cesty k účtu pro přesměrování požadavku na server Kestrel. Odpověď aplikace se předá zpět do služby IIS, která ji odešle klientovi HTTP, který požadavek inicioval.

Pokyny ke konfiguraci modulu služby IIS a ASP.NET Core najdete v následujících tématech:

Nginx a Kestrel

Informace o tom, jak používat Nginx v Linuxu jako reverzní proxy server pro Kestrel najdete v tématu Hostování ASP.NET Core v Linuxu s Nginx.

Apache a Kestrel

Informace o tom, jak používat Apache v Linuxu jako reverzní proxy server pro Kestrel najdete v tématu Hostování ASP.NET Core v Linuxu s Apache.

HTTP.sys

Pokud aplikace ASP.NET Core běží ve Windows, je HTTP.sys alternativou k serveru Kestrel. Kestrel se doporučuje používat raději než HTTP.sys, pokud aplikace nevyžaduje funkce, které nejsou na serveru Kestrel dostupné. Další informace najdete v tématu Implementace webového serveru HTTP.sys v ASP.NET Core.

HTTP.sys communicates directly with the Internet

HTTP.sys lze použít také pro aplikace, které jsou vystavené jenom v interní síti.

HTTP.sys communicates directly with the internal network

Doprovodné materiály ke konfiguraci HTTP.sys najdete v tématu Implementace webového serveru HTTP.sys v ASP.NET Core.

Infrastruktura serveru ASP.NET Core

Rozhraní IApplicationBuilder dostupné v metodě Startup.Configure vystavuje vlastnost ServerFeatures typu IFeatureCollection. Kestrel a HTTP.sys vystavují jenom jednu funkci, IServerAddressesFeature, ale různé implementace serverů mohou vystavit další funkce.

Pomocí IServerAddressesFeature

Vlastní servery

Pokud integrované servery nesplňují požadavky aplikace, je možné vytvořit vlastní implementaci serveru. Průvodce OWIN (Open Web Interface for .NET) ukazuje, jak napsat implementaci založenou na NowinIServer. Implementaci vyžadují jenom rozhraní funkcí, které aplikace využívá, ale se musí podporovat minimálně IHttpRequestFeature a IHttpResponseFeature.

Spuštění serveru

Server se spustí při spuštění aplikace v integrovaném vývojovém prostředí (IDE) nebo editoru:

Při spuštění aplikace z příkazového řádku ve složce projektu aplikaci a server spustí dotnet (jenom Kestrel a HTTP.sys). Konfigurace je určená možností -c|--configuration, která je nastavena na Debug (výchozí) nebo Release.

Soubor launchSettings.json poskytuje konfiguraci při spouštění aplikace s využitím dotnet run nebo ladicího programu integrovaného do nástrojů, jako je Visual Studio. Pokud jsou v souboru launchSettings.json k dispozici profily spouštění, použijte možnost --launch-profile {PROFILE NAME} s příkazem dotnet run nebo vyberte požadovaný profil v sadě Visual Studio. Další informace najdete v tématech dotnet run a Vytváření distribučních balíčků .NET Core.

Podpora HTTP/2

ASP.NET Core podporuje HTTP/2 v následujících scénářích nasazení:

  • Kestrel
    • Operační systém
      • Windows Server 2016 / Windows 10 nebo novější†
      • Linux s OpenSSL 1.0.2 nebo novější (například Ubuntu 16.04 nebo novější)
      • macOS 10.15 nebo novější
    • Cílová architektura: .NET Core 2.2 nebo novější
  • HTTP.sys
    • Windows Server 2016 / Windows 10 nebo novější
    • Cílová architektura: Nevztahuje se na nasazení HTTP.sys.
  • IIS (v procesu)
    • Windows Server 2016 nebo Windows 10 nebo novější, služba IIS 10 nebo novější
    • Cílová architektura: .NET Core 2.2 nebo novější
  • IIS (mimo proces)
    • Windows Server 2016 nebo Windows 10 nebo novější, služba IIS 10 nebo novější
    • Připojení k veřejnému hraničnímu serveru používají HTTP/2, ale připojení proxy serveru k serveru Kestrel používá HTTP/1.1.
    • Cílová architektura: Nevztahuje se na mimoprocesová nasazení služby IIS.

†Kestrel má omezenou podporu protokolu HTTP/2 v systémech Windows Server 2012 R2 a Windows 8.1. Podpora je omezená, protože seznam podporovaných šifrovacích sad TLS dostupných v těchto operačních systémech je omezený. K zabezpečení připojení TLS může být potřeba certifikát vygenerovaný pomocí algoritmu ECDSA (Elliptic Curve Digital Signature Algorithm).

  • Kestrel
    • Operační systém
      • Windows Server 2016 / Windows 10 nebo novější†
      • Linux s OpenSSL 1.0.2 nebo novější (například Ubuntu 16.04 nebo novější)
      • Protokol HTTP/2 bude v systému macOS podporován v některé z budoucích verzí.
    • Cílová architektura: .NET Core 2.2 nebo novější
  • HTTP.sys
    • Windows Server 2016 / Windows 10 nebo novější
    • Cílová architektura: Nevztahuje se na nasazení HTTP.sys.
  • IIS (v procesu)
    • Windows Server 2016 nebo Windows 10 nebo novější, služba IIS 10 nebo novější
    • Cílová architektura: .NET Core 2.2 nebo novější
  • IIS (mimo proces)
    • Windows Server 2016 nebo Windows 10 nebo novější, služba IIS 10 nebo novější
    • Připojení k veřejnému hraničnímu serveru používají HTTP/2, ale připojení proxy serveru k serveru Kestrel používá HTTP/1.1.
    • Cílová architektura: Nevztahuje se na mimoprocesová nasazení služby IIS.

†Kestrel má omezenou podporu protokolu HTTP/2 v systémech Windows Server 2012 R2 a Windows 8.1. Podpora je omezená, protože seznam podporovaných šifrovacích sad TLS dostupných v těchto operačních systémech je omezený. K zabezpečení připojení TLS může být potřeba certifikát vygenerovaný pomocí algoritmu ECDSA (Elliptic Curve Digital Signature Algorithm).

  • Kestrel
    • Operační systém
      • Windows Server 2016 / Windows 10 nebo novější†
      • Linux s OpenSSL 1.0.2 nebo novější (například Ubuntu 16.04 nebo novější)
      • Protokol HTTP/2 bude v systému macOS podporován v některé z budoucích verzí.
    • Cílová architektura: .NET Core 2.2 nebo novější
  • HTTP.sys
    • Windows Server 2016 / Windows 10 nebo novější
    • Cílová architektura: Nevztahuje se na nasazení HTTP.sys.
  • IIS (v procesu)
    • Windows Server 2016 nebo Windows 10 nebo novější, služba IIS 10 nebo novější
    • Cílová architektura: .NET Core 2.2 nebo novější
  • IIS (mimo proces)
    • Windows Server 2016 nebo Windows 10 nebo novější, služba IIS 10 nebo novější
    • Připojení k veřejnému hraničnímu serveru používají HTTP/2, ale připojení proxy serveru k serveru Kestrel používá HTTP/1.1.
    • Cílová architektura: Nevztahuje se na mimoprocesová nasazení služby IIS.

†Kestrel má omezenou podporu protokolu HTTP/2 v systémech Windows Server 2012 R2 a Windows 8.1. Podpora je omezená, protože seznam podporovaných šifrovacích sad TLS dostupných v těchto operačních systémech je omezený. K zabezpečení připojení TLS může být potřeba certifikát vygenerovaný pomocí algoritmu ECDSA (Elliptic Curve Digital Signature Algorithm).

  • HTTP.sys
    • Windows Server 2016 / Windows 10 nebo novější
    • Cílová architektura: Nevztahuje se na nasazení HTTP.sys.
  • IIS (mimo proces)
    • Windows Server 2016 nebo Windows 10 nebo novější, služba IIS 10 nebo novější
    • Připojení k veřejnému hraničnímu serveru používají HTTP/2, ale připojení proxy serveru k serveru Kestrel používá HTTP/1.1.
    • Cílová architektura: Nevztahuje se na mimoprocesová nasazení služby IIS.

Připojení HTTP/2 musí používat ALPN (Application-Layer Protocol Negotiation) a TLS 1.2 nebo novější. Další informace naleznete v tématech, která se týkají scénářů nasazení serveru.

Další prostředky