Ospitare ASP.NET Core in una Web farmHost ASP.NET Core in a web farm

Di Luke Latham e Chris RossBy Luke Latham and Chris Ross

Una Web farm è un gruppo di due o più server Web (o nodi) che ospita più istanze di un'app.A web farm is a group of two or more web servers (or nodes) that host multiple instances of an app. Quando arrivano richieste dagli utenti per una Web farm, un servizio di bilanciamento del carico distribuisce le richieste ai nodi della Web farm.When requests from users arrive to a web farm, a load balancer distributes the requests to the web farm's nodes. Le Web farm consentono di migliorare:Web farms improve:

  • Affidabilità/disponibilità – Quando uno o più nodi non funzionano, il servizio di bilanciamento del carico può indirizzare le richieste ad altri nodi funzionanti per continuare l'elaborazione delle richieste.Reliability/availability – When one or more nodes fail, the load balancer can route requests to other functioning nodes to continue processing requests.
  • Capacità/prestazioni – Più nodi possono elaborare più richieste rispetto a un singolo server.Capacity/performance – Multiple nodes can process more requests than a single server. Il servizio di bilanciamento del carico consente di bilanciare il carico di lavoro distribuendo le richieste ai nodi.The load balancer balances the workload by distributing requests to the nodes.
  • Scalabilità – Quando è necessaria più o meno capacità, il numero di nodi attivi può essere aumentato o ridotto in base al carico di lavoro.Scalability – When more or less capacity is required, the number of active nodes can be increased or decreased to match the workload. Le tecnologie della piattaforma per le Web farm, ad esempio Servizio app di Azure, possono aggiungere o rimuovere automaticamente nodi su richiesta dell'amministratore di sistema o automaticamente senza intervento umano.Web farm platform technologies, such as Azure App Service, can automatically add or remove nodes at the request of the system administrator or automatically without human intervention.
  • Manutenibilità – I nodi di una Web farm possono basarsi su un set di servizi condivisi, con conseguente maggiore facilità di gestione del sistema.Maintainability – Nodes of a web farm can rely on a set of shared services, which results in easier system management. Ad esempio, i nodi di una Web farm possono basarsi su un singolo server di database e un percorso di rete comune per le risorse statiche, ad esempio immagini e file scaricabili.For example, the nodes of a web farm can rely upon a single database server and a common network location for static resources, such as images and downloadable files.

Questo argomento descrive la configurazione e le dipendenze per le app ASP.NET Core ospitate in una Web farm che si basano su risorse condivise.This topic describes configuration and dependencies for ASP.NET core apps hosted in a web farm that rely upon shared resources.

Impostazioni di configurazione generaliGeneral configuration

Hosting e distribuzione di ASP.NET Core
Informazioni sulla configurazione degli ambienti host e sulla distribuzione delle app ASP.NET Core.Learn how to set up hosting environments and deploy ASP.NET Core apps. Configurare un gestore di processi in ogni nodo della Web farm per automatizzare avvii e riavvii dell'app.Configure a process manager on each node of the web farm to automate app starts and restarts. Ogni nodo richiede il runtime di ASP.NET Core.Each node requires the ASP.NET Core runtime. Per altre informazioni, vedere gli argomenti nell'area Ospitare e distribuire della documentazione.For more information, see the topics in the Host and deploy area of the documentation.

Configurare ASP.NET Core per l'uso di server proxy e servizi di bilanciamento del carico
Informazioni sulla configurazione per le app ospitate dietro server proxy e servizi di bilanciamento del carico, che spesso nascondono informazioni importanti sulle richieste.Learn about configuration for apps hosted behind proxy servers and load balancers, which often obscure important request information.

Distribuire le app ASP.NET Core in Servizio app di Azure
Il servizio app di Azure è un servizio di piattaforma di cloud computing Microsoft per l'hosting di app Web, inclusa ASP.NET Core.Azure App Service is a Microsoft cloud computing platform service for hosting web apps, including ASP.NET Core. Servizio app è una piattaforma completamente gestita che offre scalabilità automatica, bilanciamento del carico, applicazione di patch e distribuzione continua.App Service is a fully managed platform that provides automatic scaling, load balancing, patching, and continuous deployment.

Dati dell'appApp data

Quando un'app viene distribuita su più istanze, potrebbe essere necessario condividere informazioni sullo stato dell'app tra i nodi.When an app is scaled to multiple instances, there might be app state that requires sharing across nodes. Se lo stato è temporaneo, valutare la condivisione di una IDistributedCache.If the state is transient, consider sharing an IDistributedCache. Se lo stato condiviso deve essere persistente, valutare la possibilità di archiviare lo stato condiviso in un database.If the shared state requires persistence, consider storing the shared state in a database.

Configurazione richiestaRequired configuration

Occorre configurare la protezione dei dati e la memorizzazione nella cache per le app distribuite in una Web farm.Data Protection and Caching require configuration for apps deployed to a web farm.

Protezione datiData Protection

Il sistema di protezione dei dati di ASP.NET Core viene usato dalle app per proteggere i dati.The ASP.NET Core Data Protection system is used by apps to protect data. La protezione dei dati si basa su un set di chiavi di crittografia archiviate in un KeyRing.Data Protection relies upon a set of cryptographic keys stored in a key ring. Quando il sistema di protezione dei dati viene inizializzato, vengono applicate le impostazioni predefinite che archiviano il KeyRing in locale.When the Data Protection system is initialized, it applies default settings that store the key ring locally. In base alla configurazione predefinita, viene archiviato un unico KeyRing in ogni nodo della Web farm.Under the default configuration, a unique key ring is stored on each node of the web farm. Di conseguenza, ogni nodo della Web farm non può decrittografare i dati crittografati da un'app su qualsiasi altro nodo.Consequently, each web farm node can't decrypt data that's encrypted by an app on any other node. La configurazione predefinita non è in genere adatta per l'hosting di app in una Web farm.The default configuration isn't generally appropriate for hosting apps in a web farm. In alternativa all'implementazione di un KeyRing condiviso, è sempre possibile indirizzare le richieste utente allo stesso nodo.An alternative to implementing a shared key ring is to always route user requests to the same node. Per altre informazioni sulla configurazione del sistema di protezione dei dati per le distribuzioni di Web farm, vedere Configurare la protezione dei dati di ASP.NET Core.For more information on Data Protection system configuration for web farm deployments, see Configurare la protezione dei dati di ASP.NET Core.

Memorizzazione nella cacheCaching

In un ambiente Web farm, il meccanismo di memorizzazione nella cache deve condividere gli elementi memorizzati nella cache tra i nodi della Web farm.In a web farm environment, the caching mechanism must share cached items across the web farm's nodes. La memorizzazione nella cache deve basarsi su una cache Redis comune, un database di SQL Server condiviso o un'implementazione personalizzata di memorizzazione nella cache che condivide gli elementi memorizzati nella cache nella Web farm.Caching must either rely upon a common Redis cache, a shared SQL Server database, or a custom caching implementation that shares cached items across the web farm. Per ulteriori informazioni, vedere Memorizzazione nella cache in ASP.NET Core distribuita.For more information, see Memorizzazione nella cache in ASP.NET Core distribuita.

Componenti dipendentiDependent components

Gli scenari seguenti non richiedono configurazioni aggiuntive, ma dipendono da tecnologie che devono essere configurate per le Web farm.The following scenarios don't require additional configuration, but they depend on technologies that require configuration for web farms.

ScenarioScenario Dipende da …Depends on …
AutenticazioneAuthentication Protezione dei dati (vedere Configurare la protezione dei dati di ASP.NET Core).Data Protection (see Configurare la protezione dei dati di ASP.NET Core).

Per altre informazioni, vedere Usare l'autenticazione tramite cookie senza ASP.NET Core Identity e Condividere i cookie di autenticazione tra le app ASP.NET.For more information, see Usare l'autenticazione tramite cookie senza ASP.NET Core Identity and Condividere i cookie di autenticazione tra le app ASP.NET.
identitàIdentity Configurazione di autenticazione e database.Authentication and database configuration.

Per ulteriori informazioni, vedere Introduzione all'identità in ASP.NET Core.For more information, see Introduzione all'identità in ASP.NET Core.
SessioneSession Protezione dei dati (cookie crittografati) (vedere Configurare la protezione dei dati di ASP.NET Core) e memorizzazione nella cache (vedere Memorizzazione nella cache in ASP.NET Core distribuita).Data Protection (encrypted cookies) (see Configurare la protezione dei dati di ASP.NET Core) and Caching (see Memorizzazione nella cache in ASP.NET Core distribuita).

Per altre informazioni, vedere Stato di sessioni e app: Stato sessione.For more information, see Session and app state: Session state.
TempDataTempData Protezione dei dati (cookie crittografati) (vedere Configurare la protezione dei dati di ASP.NET Core) o sessione (vedere Stato di sessioni e app: Stato sessione).Data Protection (encrypted cookies) (see Configurare la protezione dei dati di ASP.NET Core) or Session (see Session and app state: Session state).

Per altre informazioni, vedere Stato di sessioni e app: TempData.For more information, see Session and app state: TempData.
AntifalsificazioneAnti-forgery Protezione dei dati (vedere Configurare la protezione dei dati di ASP.NET Core).Data Protection (see Configurare la protezione dei dati di ASP.NET Core).

Per ulteriori informazioni, vedere Evitare attacchi Cross-Site Request Forgery (XSRF/CSRF) in ASP.NET Core.For more information, see Evitare attacchi Cross-Site Request Forgery (XSRF/CSRF) in ASP.NET Core.

Risolvere i problemiTroubleshoot

Protezione dei dati e memorizzazione nella cacheData Protection and caching

Quando la protezione dei dati o la memorizzazione nella cache non è configurata per un ambiente Web farm, si verificano errori intermittenti durante l'elaborazione delle richieste.When Data Protection or caching isn't configured for a web farm environment, intermittent errors occur when requests are processed. Ciò si verifica perché i nodi non condividono le stesse risorse e le richieste degli utenti non vengono sempre indirizzate allo stesso nodo.This occurs because nodes don't share the same resources and user requests aren't always routed back to the same node.

Si consideri, ad esempio, un utente che accede all'app usando l'autenticazione basata su cookie.Consider a user who signs into the app using cookie authentication. L'utente acceda all'app in un nodo della Web farm.The user signs into the app on one web farm node. Se la richiesta successiva dell'utente arriva nello stesso nodo in cui ha eseguito l'accesso, l'app è in grado di decrittografare il cookie di autenticazione e consente l'accesso alla risorsa dell'app.If their next request arrives at the same node where they signed in, the app is able to decrypt the authentication cookie and allows access to the app's resource. Se la richiesta successiva arriva a un nodo diverso, l'app non può decrittografare il cookie di autenticazione dal nodo in cui l'utente ha eseguito l'accesso e l'autorizzazione per la risorsa richiesta ha esito negativo.If their next request arrives at a different node, the app can't decrypt the authentication cookie from the node where the user signed in, and authorization for the requested resource fails.

Quando si verifica uno dei sintomi seguenti in modo intermittente, il problema è in genere da ricondurre a una configurazione non corretta della protezione dei dati o della memorizzazione nella cache per un ambiente Web farm:When any of the following symptoms occur intermittently, the problem is usually traced to improper Data Protection or caching configuration for a web farm environment:

  • Problema di autenticazione – Il cookie di autenticazione non è configurato correttamente o non può essere decrittografato.Authentication breaks – The authentication cookie is misconfigured or can't be decrypted. Gli accessi OAuth (Facebook, Microsoft, Twitter) o OpenIdConnect non riescono con l'errore "Correlazione non riuscita."OAuth (Facebook, Microsoft, Twitter) or OpenIdConnect logins fail with the error "Correlation failed."
  • Problema di autenticazione – Identità persa.Authorization breaks – Identity is lost.
  • Perdita dei dati per lo stato della sessione.Session state loses data.
  • Gli elementi memorizzati nella cache scompaiono.Cached items disappear.
  • Errore di TempData.TempData fails.
  • Errori POST – Il controllo antifalsificazione non riesce.POSTs fail – The anti-forgery check fails.

Per altre informazioni sulla configurazione della protezione dei dati per le distribuzioni di Web farm, vedere Configurare la protezione dei dati di ASP.NET Core.For more information on Data Protection configuration for web farm deployments, see Configurare la protezione dei dati di ASP.NET Core. Per altre informazioni sulla configurazione della memorizzazione nella cache per le distribuzioni di Web farm, vedere Memorizzazione nella cache in ASP.NET Core distribuita.For more information on caching configuration for web farm deployments, see Memorizzazione nella cache in ASP.NET Core distribuita.

Ottenere dati dalle appObtain data from apps

Se le app della Web farm sono in grado di rispondere alle richieste, è possibile ottenere dati sulle richieste, le connessioni e altri dati dalle app tramite middleware inline di terminale.If the web farm apps are capable of responding to requests, obtain request, connection, and additional data from the apps using terminal inline middleware. Per altre informazioni e codice di esempio, vedere Risolvere i problemi relativi ai progetti ASP.NET Core.For more information and sample code, see Risolvere i problemi relativi ai progetti ASP.NET Core.