Recyklace Webového Poolu: Co to je a Jak to Funguje


09.03.2026

Tento článek se zabývá recyklací webového poolu, což je důležitý koncept v kontextu ASP.NET Core aplikací hostovaných ve službě IIS. Vysvětlíme si, co to je, jak to funguje a jaké jsou s tím spojené konfigurace.

Co je Modul ASP.NET Core (ANCM)?

Modul ASP.NET Core (ANCM) je nativní modul SLUŽBY IIS, který se připojuje ke kanálu SLUŽBY IIS, což umožňuje ASP.NET core aplikacím pracovat se službou IIS. Modul ASP.NET Core (ANCM) se instaluje s modulem runtime .NET Core z hostitelské sady .NET Core.

Pokyny k instalaci modulu ASP.NET Core najdete v tématu Instalace sady hostingu .NET Core.

Režimy Hostování

Existují dva hlavní modely hostování pro ASP.NET Core aplikace ve službě IIS:

  • V procesu: Aplikace ASP.NET Core běží ve stejném procesu jako pracovní proces služby IIS (w3wp.exe nebo iisexpress.exe). Vnitroprocesové hostování nabízí oproti mimoprocesovému hostování vyšší výkon, protože požadavky neprocházejí přes proxy v podobě adaptéru zpětné smyčky.
  • Mimo proces: 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 ASP.NET Core. 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. Při hostování out-of-process, modul funguje pouze s Kestrel.

Mezi jednotlivými modely hostování existují kompromisy. Sdílení fondu aplikací mezi aplikacemi se nepodporuje.

Čtěte také: Jak recyklovat starý šicí stroj

Životní Cyklus Aplikace a Recyklace

Pokud se v kořenovém adresáři aplikace zjistí soubor s názvem app_offline.htm, pokusí se ASP.NET Core Module aplikaci řádně vypnout a zastavit zpracování příchozích požadavků. V době, kdy app_offline.htm je soubor k dispozici, ASP.NET Core Module reaguje na požadavky odesláním obsahu app_offline.htm souboru. Chcete-li tuto stránku potlačit a vrátit se na výchozí stavovou stránku služby IIS 5xx, použijte disableStartUpErrorPage atribut.

Pokud používáte model hostování mimo proces, nemusí se aplikace okamžitě vypnout, pokud existuje otevřené připojení. Zjistí se odpojení klienta. V případě služby IIS Express modul nerecykluje pracovní proces, ale místo toho aktivuje řádné vypnutí aktuálního procesu SLUŽBY IIS Express. Mnoho nativních modulů, jako je ověřování systému Windows, zůstává aktivních.

Pro zamezení neočekávaných restartů NET Genia je potřeba vypnout takzvanou „recyklaci” aplikačních poolů (ukončení procesu w3wp.exe) na webovém serveru. Ve „Výchozím nastavení fondu aplikací” („Application Pool Defaults”) přejděte do sekce „Recyklace” („Recycling”) a nastavte „Pravidelný časový interval” („Regular Time Interval”) na hodnotu „0”.

Konfigurace Modulu ASP.NET Core

Modul ASP.NET Core je konfigurovatelný pomocí elementu aspNetCore v souboru web.config. Zde jsou některé z nejdůležitějších atributů:

  • processPath: Povinný atribut řetězce. Cesta ke spustitelnému souboru, který spouští proces, který naslouchá požadavkům HTTP. Podporují se relativní cesty.
  • arguments: Volitelný atribut řetězce. Argumenty, které se předávají spustitelnému souboru zadanému v atributu processPath.
  • stdoutLogEnabled: Volitelný logický atribut. Určuje, zda se má povolit protokolování stdout do souboru.
  • stdoutLogFile: Volitelný atribut řetězce. Určuje relativní nebo absolutní cestu k souboru, pro kterou jsou protokolovány stdout a stderr z procesu zadaného v processPath. Relativní cesty jsou relativní vzhledem ke kořenovému adresáři webu.
  • processesPerApplication: Volitelný celočíselnou atribut. Určuje počet instancí procesu zadaných v nastavení processPath, které je možné pro každou aplikaci spustit. Na hostování v procesu je hodnota omezena na 1. Nastavení processesPerApplication se nedoporučuje.
  • requestTimeout: Volitelný atribut časového rozsahu. Určuje dobu, po kterou ASP.NET základní modul čeká na odpověď z procesu, na kterém naslouchá %ASPNETCORE_PORT%. Ve verzích modulu ASP.NET Core, který se dodává s vydáním verze ASP.NET Core 2.1 nebo novější, requestTimeout se zadává v hodinách, minutách a sekundách. Nevztahuje se na hostování v procesu. V případě hostování v procesu modul čeká, až aplikace zpracuje požadavek. Platné hodnoty pro minuty a sekundy řetězce jsou v rozsahu 0-59.
  • startupTimeLimit: Volitelný celočíselnou atribut. Doba trvání v sekundách, po kterou modul čeká, než spustitelný soubor spustí proces, který naslouchá na portu.
  • rapidFailsPerMinute: Volitelný celočíselnou atribut. Určuje počet povolených chybových ukončení procesu zadaných v cestě processPath za minutu.
  • forwardWindowsAuthToken: Volitelný logický atribut. Pokud je hodnota true, token se předá podřízeného procesu, na %ASPNETCORE_PORT% který naslouchá jako hlavička 'MS-ASPNETCORE-WINAUTHTOKEN' na požadavek.

Proměnné prostředí lze zadat pro proces v atributu processPath. Zadejte proměnnou prostředí s <environmentVariable> podřízeným prvkem <environmentVariables> elementu kolekce. Následující příklad nastaví dvě proměnné prostředí v web.config. ASPNETCORE_ENVIRONMENT nakonfiguruje prostředí aplikace na Development. Vývojář může dočasně nastavit tuto hodnotu v web.config souboru, aby se při ladění výjimky aplikace načetla stránka výjimky vývojáře. Alternativou k nastavení prostředí přímo v web.config je zahrnutí <EnvironmentName> vlastnosti do profilu publikování (.pubxml) nebo souboru projektu.

Čtěte také: Zodpovědný přístup k recyklaci kávových kapslí

Protokolování

Modul ASP.NET Core přesměruje výstup konzoly stdout a stderr na disk, pokud stdoutLogEnabled jsou nastaveny atributy stdoutLogFile elementu aspNetCore. Všechny složky v cestě stdoutLogFile vytvoří modul při vytvoření souboru protokolu. Protokoly se nestřídají, pokud nedojde k recyklaci nebo restartování procesu. Nepoužívejte protokol stdout pro obecné účely protokolování aplikace. Pro rutinní protokolování v aplikaci ASP.NET Core použijte knihovnu protokolování, která omezuje velikost souboru protokolu a obměňuje protokoly.

Při vytváření souboru protokolu se automaticky přidají časové razítko a přípona souboru. Název souboru protokolu se skládá připojením časového razítka, ID procesu a přípony souboru (.log) k poslednímu stdoutLogFile segmentu cesty (obvykle stdout) odděleného podtržítky. Pokud cesta stdoutLogFile končí stdout, protokol aplikace s PID 1934 vytvořený 2. 5. Pokud stdoutLogEnabled je false, chyby, ke kterým dochází při spuštění aplikace, se zachytí a vygenerují do protokolu událostí až do 30 kB.

Při publikování aplikace pro nasazení služby Aplikace Azure Service nastaví stdoutLogFile webová sada SDK hodnotu na \\?\%home%\LogFiles\stdout.

Modul ASP.NET Core je konfigurovatelný tak, aby poskytoval rozšířené diagnostické protokoly. <handlerSettings> Přidejte prvek do elementu <aspNetCore> v souboru web.config. Všechny složky v cestě (logs v předchozím příkladu) vytvoří modul při vytvoření souboru protokolu.

ASPNETCORE_MODULE_DEBUG_FILE: Cesta k souboru protokolu ladění. Nezanechávejte protokolování ladění povolené v nasazení déle, než je nutné k řešení potíží. Velikost protokolu není omezená.

Čtěte také: Výzvy v recyklaci tvrzených plastů

Ochrana Dat

Stack ochrany dat ASP.NET Core je využíván několika middlewary ASP.NET Core, včetně middlewaru používaného k ověřování. I když se v uživatelském kódu nevolají rozhraní Data Protection API, ve skriptu nasazení nebo v uživatelském kódu by měla být nakonfigurována ochrana dat, aby se vytvořilo trvalé úložiště kryptografických klíčů. Veškerá data chráněná daným svazkem klíčů již není možné dešifrovat.

ASP.NET klíče ochrany základních dat používané aplikacemi ASP.NET Core jsou uložené v registru externím pro aplikace. V případě samostatných instalací služby IIS mimo webovou farmu je možné pro jednotlivé fondy aplikací používané v aplikaci ASP.NET Core použít skript PowerShellu pro ochranu dat Provision-AutoGenKeys.ps1. Tento skript vytvoří klíč v registru HKLM, který je přístupný pouze pro účet pracovního procesu v app pool aplikace.

Ve scénářích webové farmy je možné aplikaci nakonfigurovat tak, aby používala cestu UNC k uložení okruhu klíče ochrany dat. Ve výchozím nastavení nejsou klíče šifrované. Ujistěte se, že jsou oprávnění k souborům pro sdílenou síť omezena na účet Windows, pod kterým aplikace běží. Certifikát X509 lze použít k ochraně uložených klíčů. Zvažte mechanismus, který uživatelům umožní nahrávat certifikáty. Umístěte certifikáty do důvěryhodného úložiště certifikátů uživatele a ujistěte se, že jsou dostupné na všech počítačích, na kterých běží aplikace uživatele.

Toto nastavení najdete v části Upřesňující nastavení fondu aplikací v části Model zpracování. Nastavte možnost Načíst profil uživatele na hodnotu True. Pokud je nastavená hodnota True, klíče se uchovávají v adresáři profilu uživatele a jsou chráněné pomocí rozhraní Data Protection API a klíče specifického pro daný uživatelský účet. Atribut setProfileEnvironment fondů aplikací musí být také povolen. Výchozí hodnota atributu setProfileEnvironment je true. V některých scénářích (například v operačním systému Windows) je atribut setProfileEnvironment nastavený na hodnotu false.

Upravte kód aplikace tak, aby se jako úložiště svazku klíčů používal systém souborů. K zajištění ochrany svazku klíčů použijte certifikát X509 a ujistěte se, že se jedná o důvěryhodný certifikát. Na každý počítač nasaďte certifikát X509. Systém Ochrany dat má omezenou podporu pro nastavení výchozích zásad pro všechny aplikace, které využívají rozhraní API ochrany dat.

Další Konfigurace

  • Velikost spravovaného zásobníku: Nakonfigurujte velikost spravovaného zásobníku stackSize pomocí nastavení v šestnáctkových bajtech v souboru web.config. Výchozí velikost je 0x100000 bajtů (1 MB).
  • Zpoždění vypnutí: Ve výchozím nastavení dochází k jednomu druhému zpoždění mezi tím, kdy služba IIS oznámí recyklaci nebo vypnutí a když ANCM řekne spravovanému serveru, aby zahájil vypnutí. Zpoždění je možné konfigurovat prostřednictvím ANCM_shutdownDelay proměnné prostředí nebo nastavením nastavení obslužné rutiny shutdownDelay. Obě hodnoty jsou v milisekundách.
  • Párovací token: Párovací token se používá k zajištění toho, že žádosti přijaté službou Kestrel IIS byly zasílané službou IIS a nepřišly z jiného zdroje. Token párování se vytvoří a nastaví do proměnné prostředí (ASPNETCORE_TOKEN) modulu. Párovací token se také nastaví do hlavičky (MS-ASPNETCORE-TOKEN) pro každý proxyovaný požadavek. Middleware služby IIS kontroluje každý obdržený požadavek a ověří, že hlavička párovacího tokenu odpovídá hodnotě proměnné prostředí. Pokud se hodnoty tokenu neshodují, požadavek se zaprotokoluje a odmítne. Proměnná prostředí párovacího tokenu a provoz mezi modulem a Kestrel nejsou přístupné z umístění mimo server.

Tabulka Atributů Konfigurace aspNetCore

Atribut Popis
processPath Cesta ke spustitelnému souboru.
arguments Argumenty pro spustitelný soubor.
stdoutLogEnabled Povolení protokolování stdout.
stdoutLogFile Cesta k souboru protokolu stdout.
processesPerApplication Počet instancí procesu na aplikaci.
requestTimeout Časový limit požadavku.
startupTimeLimit Časový limit spuštění.
rapidFailsPerMinute Počet rychlých selhání za minutu.
forwardWindowsAuthToken Předávání tokenu ověřování Windows.

tags: #recyklace #weboveho #poolu #co #to #je

Oblíbené příspěvky:

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Kontakt

Zelaná Hrebová, z.s.

[email protected]
IČ: 06244655
Paskovská 664/33
Ostrava-Hrabová
72000

Bc. Jana Veclavaková, DiS.

tel. 774 454 466
[email protected]

Jaena Batelk, MBA

tel. 733 595 725
[email protected]