Hosten von ASP.NET Core in einer WebfarmHost ASP.NET Core in a web farm

Von Chris RossBy Chris Ross

Eine Webfarm ist eine Gruppe von mindestens zwei Webservern (oder Knoten), die mehrere Instanzen einer App hostet.A web farm is a group of two or more web servers (or nodes) that host multiple instances of an app. Wenn eine Webfarm Benutzeranforderungen empfängt, verteilt ein Lastenausgleichsmodul die Anforderungen auf die Knoten der Webfarm.When requests from users arrive to a web farm, a load balancer distributes the requests to the web farm's nodes. Webfarmen verbessern:Web farms improve:

  • Zuverlässigkeit/Verfügbarkeit: Wenn bei mindestens einem Knoten ein Fehler auftritt, kann der Lastenausgleich Anforderungen zur weiteren Verarbeitung an andere funktionierende Knoten weiterleiten.Reliability/availability: When one or more nodes fail, the load balancer can route requests to other functioning nodes to continue processing requests.
  • Kapazität/Leistung: Mehrere Knoten können mehr Anforderungen verarbeiten als ein einzelner Server.Capacity/performance: Multiple nodes can process more requests than a single server. Das Lastenausgleichsmodul verteilt den Workload, indem Anforderungen auf die Knoten verteilt werden.The load balancer balances the workload by distributing requests to the nodes.
  • Skalierbarkeit: Wenn mehr oder weniger Kapazität benötigt wird, kann die Anzahl der aktiven Knoten entsprechend der Arbeitsauslastung erhöht oder verringert werden.Scalability: When more or less capacity is required, the number of active nodes can be increased or decreased to match the workload. Webfarmtechnologien wie Azure App Service können Knoten automatisch auf Systemadministratoranforderungen hin hinzufügen oder entfernen bzw. diese Vorgänge komplett ohne manuelles Eingreifen ausführen.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.
  • Wartbarkeit: Knoten einer Webfarm können auf einer Reihe von gemeinsamen Diensten basieren, wodurch die Systemverwaltung vereinfacht wird.Maintainability: Nodes of a web farm can rely on a set of shared services, which results in easier system management. Beispielsweise können die Knoten einer Webfarm auf einem einzigen Datenbankserver und einer gemeinsamen Netzwerkadresse für statische Ressourcen wie Images und herunterladbare Dateien basieren.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.

Dieses Thema beschreibt die Konfiguration und Abhängigkeiten für ASP.NET Core-Apps, die in einer Webfarm gehostet werden und auf freigegebenen Ressourcen basieren.This topic describes configuration and dependencies for ASP.NET core apps hosted in a web farm that rely upon shared resources.

Allgemeine KonfigurationGeneral configuration

Hosten und Bereitstellen von ASP.NET Core
Erfahren Sie, wie Sie Hostingumgebungen einrichten und ASP.NET Core-Apps bereitstellen.Learn how to set up hosting environments and deploy ASP.NET Core apps. Konfigurieren Sie einen Prozess-Manager auf jedem Knoten der Webfarm, um App-Starts und -Neustarts zu automatisieren.Configure a process manager on each node of the web farm to automate app starts and restarts. Jeder Knoten benötigt die ASP.NET Core-Laufzeit.Each node requires the ASP.NET Core runtime. Weitere Informationen finden Sie in der Dokumentation Hosten und Bereitstellen von ASP.NET Core.For more information, see the topics in the Host and deploy area of the documentation.

Konfigurieren von ASP.NET Core zur Verwendung mit Proxyservern und Lastenausgleich
Informationen zur Konfiguration von hinter Proxyservern und Lastenausgleichsmodulen gehosteten Apps, wobei wichtige Anforderungsinformationen häufig verdeckt werdenLearn about configuration for apps hosted behind proxy servers and load balancers, which often obscure important request information.

Bereitstellen von ASP.NET Core-Apps in Azure App Service
Azure App Service ist ein Microsoft Cloud Computing-Plattformdienst zum Hosten von Web-Apps. Dazu gehört auch ASP.NET Core.Azure App Service is a Microsoft cloud computing platform service for hosting web apps, including ASP.NET Core. App Service ist eine vollständig verwaltete Plattform, die automatisches Skalieren, Lastenausgleich, Patchen und Continuous Deployment bietet.App Service is a fully managed platform that provides automatic scaling, load balancing, patching, and continuous deployment.

App-DatenApp data

Wenn eine App auf mehrere Instanzen skaliert wird, muss der App-Status möglicherweise über Knoten hinweg freigegeben werden.When an app is scaled to multiple instances, there might be app state that requires sharing across nodes. Im Falle eines Übergangsstatus sollten Sie IDistributedCache freigeben.If the state is transient, consider sharing an IDistributedCache. Wenn der freigegebene Status Persistenz erfordert, speichern Sie ihn in einer Datenbank.If the shared state requires persistence, consider storing the shared state in a database.

Erforderliche KonfigurationRequired configuration

Schutz von Daten und Zwischenspeichern benötigen eine in einer Webfarm bereitgestellte App-Konfiguration.Data Protection and Caching require configuration for apps deployed to a web farm.

Schutz von DatenData Protection

Der ASP.NET Core-Datenschutz wird von Apps verwendet, um Daten zu schützen.The ASP.NET Core Data Protection system is used by apps to protect data. Der Schutz von Daten basiert auf einem Satz kryptografischer Schlüssel in einer Schlüsselsammlung.Data Protection relies upon a set of cryptographic keys stored in a key ring. Wenn das System zum Schutz von Daten initialisiert wird, werden Standardeinstellungen angewendet, die die Schlüsselsammlung lokal speichern.When the Data Protection system is initialized, it applies default settings that store the key ring locally. In der Standardkonfiguration wird eine eindeutige Schlüsselsammlung auf jedem Knoten der Webfarm gespeichert.Under the default configuration, a unique key ring is stored on each node of the web farm. Folglich kann kein Webfarmknoten Daten entschlüsseln, die von einer App auf einem anderen Knoten verschlüsselt werden.Consequently, each web farm node can't decrypt data that's encrypted by an app on any other node. Die Standardkonfiguration eignet sich in der Regel nicht für das Hosten von Apps in einer Webfarm.The default configuration isn't generally appropriate for hosting apps in a web farm. Eine Alternative zur Implementierung einer freigegebenen Schlüsselsammlung besteht darin, Benutzeranforderungen immer an denselben Knoten weiterzuleiten.An alternative to implementing a shared key ring is to always route user requests to the same node. Weitere Informationen zur Systemkonfiguration zum Schutz von Daten für Webfarmbereitstellungen finden Sie unter Konfigurieren des Schutzes von Daten in ASP.NET Core.For more information on Data Protection system configuration for web farm deployments, see Konfigurieren des Schutzes von Daten in ASP.NET Core.

ZwischenspeicherungCaching

In einer Webfarmumgebung muss der Zwischenspeichermechanismus zwischengespeicherte Elemente über die Webfarmknoten hinweg freigeben.In a web farm environment, the caching mechanism must share cached items across the web farm's nodes. Das Zwischenspeichern muss auf einem Redis Cache, einer freigegebenen SQL Server-Datenbank oder einer benutzerdefinierten Zwischenspeicherimplementierung basieren, die zwischengespeicherte Elemente über die Webfarm hinweg freigibt.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. Weitere Informationen finden Sie unter Verteiltes Zwischenspeichern in ASP.net Core.For more information, see Verteiltes Zwischenspeichern in ASP.net Core.

Abhängige KomponentenDependent components

Die folgenden Szenarien erfordern keine zusätzliche Konfiguration, hängen jedoch von Technologien ab, die eine Webfarmkonfiguration benötigen.The following scenarios don't require additional configuration, but they depend on technologies that require configuration for web farms.

SzenarioScenario Abhängig von…Depends on …
AuthentifizierungAuthentication Schutz von Daten (siehe Konfigurieren des Schutzes von Daten in ASP.NET Core).Data Protection (see Konfigurieren des Schutzes von Daten in ASP.NET Core).

Weitere Informationen finden Sie unter Verwenden der Cookie-Authentifizierung ohne ASP.net CoreIdentity und Freigeben von Authentifizierungs Cookies zwischen ASP.net-apps.For more information, see Verwenden der Cookie-Authentifizierung ohne ASP.net CoreIdentity and Freigeben von Authentifizierungs Cookies zwischen ASP.net-apps.
Identity Authentifizierung und Datenbankkonfiguration.Authentication and database configuration.

Weitere Informationen finden Sie unter Einführung in Identity ASP.net Core.For more information, see Einführung in Identity ASP.net Core.
SitzungSession Schutz von Daten (verschlüsselte Cookies) (siehe Konfigurieren des Schutzes von Daten in ASP.NET Core) und Zwischenspeichern (siehe Verteiltes Zwischenspeichern in ASP.net Core).Data Protection (encrypted cookies) (see Konfigurieren des Schutzes von Daten in ASP.NET Core) and Caching (see Verteiltes Zwischenspeichern in ASP.net Core).

Weitere Informationen finden Sie unter Sitzungs- und Zustandsverwaltung: Sitzungszustand.For more information, see Session and state management: Session state.
TempDataTempData Schutz von Daten (verschlüsselte Cookies) (siehe Konfigurieren des Schutzes von Daten in ASP.NET Core) oder Sitzung (siehe Sitzungs- und Zustandsverwaltung: Sitzungszustand).Data Protection (encrypted cookies) (see Konfigurieren des Schutzes von Daten in ASP.NET Core) or Session (see Session and state management: Session state).

Weitere Informationen finden Sie unter Sitzungs- und Zustandsverwaltung: TempData.For more information, see Session and state management: TempData.
FälschungssicherheitAnti-forgery Schutz von Daten (siehe Konfigurieren des Schutzes von Daten in ASP.NET Core).Data Protection (see Konfigurieren des Schutzes von Daten in ASP.NET Core).

Weitere Informationen finden Sie unter Verhindern von Angriffen für Website übergreifende Anforderungs Fälschung (XSRF/CSRF) in ASP.net Core.For more information, see Verhindern von Angriffen für Website übergreifende Anforderungs Fälschung (XSRF/CSRF) in ASP.net Core.

ProblembehandlungTroubleshoot

Schutz von Daten und ZwischenspeichernData Protection and caching

Wenn der Schutz von Daten oder Zwischenspeichern für eine Webfarmumgebung nicht konfiguriert wurde, treten beim Verarbeiten von Anforderungen zeitweilig Fehler auf.When Data Protection or caching isn't configured for a web farm environment, intermittent errors occur when requests are processed. Dies geschieht, weil Knoten nicht dieselben Ressourcen teilen und Benutzeranforderungen nicht immer an denselben Knoten zurückgeleitet werden.This occurs because nodes don't share the same resources and user requests aren't always routed back to the same node.

Gehen Sie beispielsweise von einem Benutzer aus, der sich mithilfe der Cookieauthentifizierung in der App anmeldet.Consider a user who signs into the app using cookie authentication. Der Benutzer meldet sich in der App auf einem Webfarmknoten an.The user signs into the app on one web farm node. Wenn seine nächste Anforderung auf demselben Knoten eintrifft, auf dem er sich angemeldet hat, kann die App das Authentifizierungscookie entschlüsseln und den Zugriff auf die App-Ressource gewähren.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. Wenn seine nächste Anforderung auf einem anderen Knoten eintrifft, kann die App das Authentifizierungscookie nicht auf dem Knoten entschlüsseln, auf dem der Benutzer angemeldet ist, und die Autorisierung für die angeforderte Ressource schlägt fehl.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.

Wenn eines der folgenden Symptome zeitweilig auftritt, ist das Problem in der Regel auf eine falsche Konfiguration zum Schutz von Daten oder zum Zwischenspeichern für eine Webfarmumgebung zurückgeführt: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:

  • Authentifizierungsfehler: Das Authentifizierungscookie ist falsch konfiguriert oder kann nicht entschlüsselt werden.Authentication breaks: The authentication cookie is misconfigured or can't be decrypted. OAuth (Facebook, Microsoft und Twitter) oder OpenIdConnect-Anmeldungen schlagen mit der Fehlermeldung „Korrelationsfehler“ fehl.OAuth (Facebook, Microsoft, Twitter) or OpenIdConnect logins fail with the error "Correlation failed."
  • Authentifizierungsfehler: Identity geht verloren.Authorization breaks: Identity is lost.
  • Im Sitzungszustand gehen Daten verloren.Session state loses data.
  • Zwischengespeicherte Elemente werden nicht angezeigt.Cached items disappear.
  • Fehler bei TempData.TempData fails.
  • Fehler bei POSTs: Die Überprüfung zur Fälschungssicherheit schlägt fehl.POSTs fail: The anti-forgery check fails.

Weitere Informationen zur Konfiguration zum Schutz von Daten für Webfarmbereitstellungen finden Sie unter Konfigurieren des Schutzes von Daten in ASP.NET Core.For more information on Data Protection configuration for web farm deployments, see Konfigurieren des Schutzes von Daten in ASP.NET Core. Weitere Informationen zur Zwischenspeicherkonfiguration für Webfarmbereitstellungen finden Sie unter Verteiltes Zwischenspeichern in ASP.net Core.For more information on caching configuration for web farm deployments, see Verteiltes Zwischenspeichern in ASP.net Core.

Abrufen von Daten aus AppsObtain data from apps

Wenn die Webfarm-Apps in der Lage sind, auf Anforderungen zu reagieren, erhalten Sie Anforderungen, Verbindungen und zusätzliche Daten von den Apps über die Inlinemiddleware des Terminals.If the web farm apps are capable of responding to requests, obtain request, connection, and additional data from the apps using terminal inline middleware. Weitere Informationen und Beispielcode finden Sie unter Problembehandlung und Debuggen von ASP.NET Core-Projekten.For more information and sample code, see Problembehandlung und Debuggen von ASP.NET Core-Projekten.

Zusätzliche RessourcenAdditional resources