Web ファームでの ASP.NET Core のホストHost ASP.NET Core in a web farm

作成者: Chris RossBy Chris Ross

"Web ファーム" とは、アプリのインスタンスを複数ホストする、2 つ以上の Web サーバー (または "ノード") のグループのことです。A web farm is a group of two or more web servers (or nodes) that host multiple instances of an app. ユーザーからの要求が Web ファームに到着すると、"ロード バランサー" が要求を Web ファームのノードに分散します。When requests from users arrive to a web farm, a load balancer distributes the requests to the web farm's nodes. Web ファームの利点は次のとおりです。Web farms improve:

  • 信頼性/可用性:1 つまたは複数のノードに障害が発生した場合、ロード バランサーによって要求が機能しているノードにルーティングされ、要求の処理を続行することができます。Reliability/availability: When one or more nodes fail, the load balancer can route requests to other functioning nodes to continue processing requests.
  • 容量/パフォーマンス:複数のノードは 1 台のサーバーよりもより多くの要求を処理できます。Capacity/performance: Multiple nodes can process more requests than a single server. ロード バランサーは、ノードへの要求を分散することにでワークロードのバランスをとります。The load balancer balances the workload by distributing requests to the nodes.
  • スケーラビリティ:より多くの (またはより少ない) 容量が必要になると、ワークロードに一致するようにアクティブなノードの数を増加 (または減少) させることができます。Scalability: When more or less capacity is required, the number of active nodes can be increased or decreased to match the workload. Azure App Service などの Web ファーム プラットフォーム テクノロジでは、システム管理者の要求に応じて、または人の介入なしに、自動的にノードを追加したり削除したりできます。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.
  • 保守容易性:Web ファームのノードでは一連の共有サービスを利用できるため、システム管理が簡単になります。Maintainability: Nodes of a web farm can rely on a set of shared services, which results in easier system management. たとえば、Web ファームのノードにおいて、画像やダウンロード可能ファイルなどの静的リソースのために、単一のデータベース サーバーと共通のネットワークの場所を利用することができます。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.

このトピックでは、共有リソースを利用する Web ファームでホストされている ASP.NET Core アプリ用の構成と依存関係について説明します。This topic describes configuration and dependencies for ASP.NET core apps hosted in a web farm that rely upon shared resources.

全般構成General configuration

ASP.NET Core のホストと展開
ホスティング環境を設定し、ASP.NET Core アプリを展開する方法を学習します。Learn how to set up hosting environments and deploy ASP.NET Core apps. Web ファームの各ノード上のプロセス マネージャーを構成して、アプリの起動と再起動を自動化します。Configure a process manager on each node of the web farm to automate app starts and restarts. 各ノードには ASP.NET Core ランタイムが必要です。Each node requires the ASP.NET Core runtime. 詳細については、ドキュメントのホストと展開に関する部分のトピックをご覧ください。For more information, see the topics in the Host and deploy area of the documentation.

プロキシ サーバーとロード バランサーを使用するために ASP.NET Core を構成する
プロキシ サーバーとロード バランサーの背後にホストされているアプリの構成について説明します。このような構成では、要求の重要な情報がわからなくなることがよくあります。Learn about configuration for apps hosted behind proxy servers and load balancers, which often obscure important request information.

Azure App Service に ASP.NET Core アプリを展開する
Azure App Service は ASP.NET Core を含む Web アプリをホストするための Microsoft クラウド コンピューティング プラットフォーム サービスです。Azure App Service is a Microsoft cloud computing platform service for hosting web apps, including ASP.NET Core. App Service は、自動スケーリング、負荷分散、修正プログラムの適用、および継続的配置を提供する、フル マネージドのプラットフォームです。App Service is a fully managed platform that provides automatic scaling, load balancing, patching, and continuous deployment.

アプリのデータApp data

アプリが複数のインスタンスに対してスケーリングされると、ノード間での共有を必要とするアプリの状態が出現する可能性があります。When an app is scaled to multiple instances, there might be app state that requires sharing across nodes. この状態が一時的である場合は、IDistributedCache を共有することを検討してください。If the state is transient, consider sharing an IDistributedCache. 共有状態を永続的に保つ必要がある場合は、共有状態をデータベースに格納することを検討してください。If the shared state requires persistence, consider storing the shared state in a database.

必要な構成Required configuration

Web ファームに展開されるアプリに対して、データの保護とキャッシュを構成する必要があります。Data Protection and Caching require configuration for apps deployed to a web farm.

データの保護Data Protection

アプリでは、データを保護するために ASP.NET Core データ保護システムが使用されます。The ASP.NET Core Data Protection system is used by apps to protect data. データ保護では、"キー リング" に格納されている一連の暗号化キーが利用されます。Data Protection relies upon a set of cryptographic keys stored in a key ring. データ保護システムを初期化すると、キー リングをローカルに格納する既定の設定が適用されます。When the Data Protection system is initialized, it applies default settings that store the key ring locally. 既定の構成では、Web ファームの各ノード上に一意のキー リングが格納されます。Under the default configuration, a unique key ring is stored on each node of the web farm. このため、Web ファームの各ノードは、他のノード上のアプリが暗号化したデータを暗号化解除することはできません。Consequently, each web farm node can't decrypt data that's encrypted by an app on any other node. 既定の構成が Web ファームでのアプリのホスト全般に対して適切であるわけではありません。The default configuration isn't generally appropriate for hosting apps in a web farm. 共有キー リングを実装する代わりに、ユーザー要求を常に同じノードにルーティングすることもできます。An alternative to implementing a shared key ring is to always route user requests to the same node. Web ファームの展開に向けたデータ保護システムの構成について詳しくは、ASP.NET Core データ保護の構成 をご覧ください。For more information on Data Protection system configuration for web farm deployments, see ASP.NET Core データ保護の構成.

キャッシュCaching

Web ファーム環境におけるキャッシュのメカニズムでは、Web ファームのノード間でキャッシュされる項目を共有する必要があります。In a web farm environment, the caching mechanism must share cached items across the web farm's nodes. キャッシュは、一般的な Redis Cache (SQL Server 共有データベース) を利用するか、またはキャッシュされる項目を Web ファーム間で共有するカスタム実装のキャッシュを利用する必要があります。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. 詳細については、「ASP.NET Core での分散キャッシュ」を参照してください。For more information, see ASP.NET Core での分散キャッシュ.

依存コンポーネントDependent components

次のシナリオに追加構成は必要ありませんが、シナリオが依存するテクノロジには、Web ファーム用の構成が必要です。The following scenarios don't require additional configuration, but they depend on technologies that require configuration for web farms.

シナリオScenario 依存先 …Depends on …
認証Authentication データ保護 (ASP.NET Core データ保護の構成 を参照)。Data Protection (see ASP.NET Core データ保護の構成).

詳細については、次のトピックを参照してください。 認証を使用 cookie しない ASP.NET Core Identity および ASP.NET アプリ間での認証の共有 cookieFor more information, see 認証を使用 cookie しない ASP.NET Core Identity and ASP.NET アプリ間での認証の共有 cookie.
Identity 認証とデータベースの構成。Authentication and database configuration.

詳細については、「IdentityASP.NET Core の概要」を参照してください。For more information, see IdentityASP.NET Core の概要.
セッションSession データ保護 (暗号化された cookie) (ASP.NET Core データ保護の構成 を参照) とキャッシュ (ASP.NET Core での分散キャッシュ を参照)。Data Protection (encrypted cookies) (see ASP.NET Core データ保護の構成) and Caching (see ASP.NET Core での分散キャッシュ).

詳細については、セッションと状態の管理に関するページの「セッション状態」を参照してください。For more information, see Session and state management: Session state.
TempDataTempData データ保護 (暗号化された cookie) (ASP.NET Core データ保護の構成 を参照) またはセッション (セッションと状態の管理に関するページの「セッション状態」を参照)。Data Protection (encrypted cookies) (see ASP.NET Core データ保護の構成) or Session (see Session and state management: Session state).

詳細については、セッションと状態の管理に関するページの「TempData」を参照してください。For more information, see Session and state management: TempData.
偽造防止Anti-forgery データ保護 (ASP.NET Core データ保護の構成 を参照)。Data Protection (see ASP.NET Core データ保護の構成).

詳細については、「ASP.NET Core でのクロスサイト要求偽造 (XSRF/CSRF) 攻撃を防ぐ」を参照してください。For more information, see ASP.NET Core でのクロスサイト要求偽造 (XSRF/CSRF) 攻撃を防ぐ.

トラブルシューティングTroubleshoot

データ保護とキャッシュData Protection and caching

データ保護またはキャッシュが Web ファーム環境用に構成されていない場合、要求の処理中に断続的にエラーが発生します。When Data Protection or caching isn't configured for a web farm environment, intermittent errors occur when requests are processed. このエラーは、ノード間で同じリソースが共有されておらず、ユーザー要求が同じノードにルーティングされない場合があるために発生します。This occurs because nodes don't share the same resources and user requests aren't always routed back to the same node.

ユーザーが cookie 認証を使用してアプリにサインインする場合を考えてみます。Consider a user who signs into the app using cookie authentication. このユーザーは、1 つの Web ファームのノード上にあるアプリにサインインします。The user signs into the app on one web farm node. ユーザーの次の要求が、ユーザーがサインインしたノードと同じノードに届いた場合、アプリは認証 cookie の暗号化を解除して、アプリのリソースへのアクセスを許可することができます。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. ユーザーの次の要求が異なるノードに届いた場合、アプリはユーザーがサインインしたノードの認証 cookie の暗号化を解除できず、要求されたリソースに対する認証は失敗します。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.

次の現象のいずれかが 断続的に 発生するときは、多くの場合、データ保護またはキャッシュが Web ファーム環境に向けて適切に構成されていないことが問題の原因です。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:

  • 認証の中断:認証 cookie が正しく構成されていない、または暗号化解除できない。Authentication breaks: The authentication cookie is misconfigured or can't be decrypted. OAuth (Facebook、Microsoft、Twitter) ログインまたは OpenIdConnect ログインが「関連付けできませんでした」というエラーで失敗する。OAuth (Facebook, Microsoft, Twitter) or OpenIdConnect logins fail with the error "Correlation failed."
  • 承認の中断: Identity が失われる。Authorization breaks: Identity is lost.
  • セッション状態でデータが失われる。Session state loses data.
  • キャッシュされた項目が消える。Cached items disappear.
  • TempData が失敗する。TempData fails.
  • POST の失敗:偽造防止チェックが失敗する。POSTs fail: The anti-forgery check fails.

Web ファームの展開に向けたデータ保護の構成について詳しくは、ASP.NET Core データ保護の構成 をご覧ください。For more information on Data Protection configuration for web farm deployments, see ASP.NET Core データ保護の構成. Web ファームの展開に向けたキャッシュの構成について詳しくは、「ASP.NET Core での分散キャッシュ」をご覧ください。For more information on caching configuration for web farm deployments, see ASP.NET Core での分散キャッシュ.

アプリからデータを取得するObtain data from apps

Web ファーム アプリが要求に応答できる場合は、ターミナル インライン ミドルウェアを使用して、要求、接続、その他のデータをアプリから取得します。If the web farm apps are capable of responding to requests, obtain request, connection, and additional data from the apps using terminal inline middleware. 詳細およびサンプル コードについては、「ASP.NET Core プロジェクトのトラブルシューティングとデバッグ」を参照してください。For more information and sample code, see ASP.NET Core プロジェクトのトラブルシューティングとデバッグ.

その他の技術情報Additional resources