IIS と ASP.NET Core を使用したアウトプロセス ホスティング
Note
これは、この記事の最新バージョンではありません。 現在のリリースについては、この記事の .NET 8 バージョンを参照してください。
警告
このバージョンの ASP.NET Core はサポート対象から除外されました。 詳細については、「.NET および .NET Core サポート ポリシー」を参照してください。 現在のリリースについては、この記事の .NET 8 バージョンを参照してください。
重要
この情報はリリース前の製品に関する事項であり、正式版がリリースされるまでに大幅に変更される可能性があります。 Microsoft はここに示されている情報について、明示か黙示かを問わず、一切保証しません。
現在のリリースについては、この記事の .NET 8 バージョンを参照してください。
ASP.NET Core アプリは IIS ワーカー プロセスとは独立したプロセスで実行されるため、プロセス管理は ASP.NET Core モジュールによって処理されます。 モジュールでは、最初の要求が届いたときに ASP.NET Core アプリのプロセスが開始され、プロセスがシャットダウンまたはクラッシュした場合はアプリが再起動されます。 この動作は、インプロセスで実行されるアプリであり、WAS (Windows プロセス アクティブ化サービス) によって管理されるアプリと基本的に同じです。
次の図は、IIS (ASP.NET Core モジュール) とアウトプロセスでホストされるアプリとの間のリレーションシップを示しています。
- 要求は、Web からカーネル モードの HTTP.sys ドライバーに到着します。
- ドライバーは、Web サイトの構成ポートで IIS への要求をルーティングします。 構成されるポートは、通常 80 (HTTP) または 443 (HTTPS) です。
- モジュールでは、アプリのランダムなポートで Kestrel に要求を転送します。 ランダムなポートは 80 または 443 ではありません。
ASP.NET Core モジュールは、起動時に環境変数によってポートを指定します。 UseIISIntegration 拡張機能は、http://localhost:{PORT}
でリッスンするようにサーバーを構成します。 追加のチェックが実行され、モジュールから発生していない要求は拒否されます。 モジュールは HTTPS 転送をサポートしていません。 要求は HTTPS を介して IIS によって受信された場合でも HTTP を介して転送されます。
Kestrel によってモジュールから要求が取り込まれた後、その要求は ASP.NET Core ミドルウェア パイプラインに転送されます。 ミドルウェア パイプラインは要求を処理し、HttpContext
インスタンスとしてアプリのロジックに渡します。 IIS 統合によって追加されたミドルウェアでは、Kestrel への要求の転送を考慮して、スキーム、リモート IP、およびパスベースが更新されます。 アプリの応答が IIS に戻され、IIS はその応答を、要求を開始した HTTP クライアントに返します。
ASP.NET Core モジュールの構成ガイダンスについては、「IIS の ASP.NET Core モジュール (ANCM)」を参照してください。
ホスティングの詳細については、「Hosting in ASP.NET Core」(ASP.NET Core でのホスティング) を参照してください。
アプリケーション構成
IISIntegration コンポーネントを有効にする
CreateHostBuilder
(Program.cs
) でホストを構築する場合は、CreateDefaultBuilder を呼び出して IIS 統合を有効にします。
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
...
CreateDefaultBuilder
の詳細については、「CreateDefaultBuilder
」を参照してください。
アウトプロセス ホスティング モデル
IIS オプションを構成するには、IISOptions 用のサービス構成を ConfigureServices に含めます。 次の例では、アプリが HttpContext.Connection.ClientCertificate
を設定できません。
services.Configure<IISOptions>(options =>
{
options.ForwardClientCertificate = false;
});
オプション | Default | 設定 |
---|---|---|
AutomaticAuthentication |
true |
true の場合、IIS 統合ミドルウェアによって、Windows 認証で認証された HttpContext.User が設定されます。 false の場合、ミドルウェアは HttpContext.User の identity を提供するだけで、AuthenticationScheme によって明示的に要求されたときに課題に応答します。 AutomaticAuthentication を機能させるためには、IIS で Windows 認証を有効にする必要があります。 詳細については、「Windows 認証」のトピックを参照してください。 |
AuthenticationDisplayName |
null |
ログイン ページでユーザーに表示名が表示されるように設定します。 |
ForwardClientCertificate |
true |
true の場合、MS-ASPNETCORE-CLIENTCERT 要求ヘッダーが指定されていると、HttpContext.Connection.ClientCertificate が設定されます。 |
プロキシ サーバーとロード バランサーのシナリオ
IIS 統合ミドルウェアと ASP.NET Core モジュールは、次を転送するように構成されています。
- スキーム (HTTP/HTTPS)。
- 要求元のリモート IP アドレス。
IIS 統合ミドルウェアは、Forwarded Headers Middleware を構成します。
追加のプロキシ サーバーとロード バランサーの背後でホストされているアプリでは、追加の構成が必要になる場合があります。 詳細については、「プロキシ サーバーとロード バランサーを使用するために ASP.NET Core を構成する」を参照してください。
アウト プロセス ホスティング モデル
アウトプロセス ホスティング用にアプリを構成するには、プロジェクト ファイル ( .csproj
) で、<AspNetCoreHostingModel>
プロパティの値を OutOfProcess
に設定します。
<PropertyGroup>
<AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
</PropertyGroup>
インプロセス ホスティングは InProcess
で設定され、これが既定値です。
<AspNetCoreHostingModel>
の値では大文字と小文字が区別されないため、inprocess
と outofprocess
は有効な値となります。
IIS HTTP サーバー (IISHttpServer
) の代わりに、Kestrel サーバーが使用されます。
アウトプロセスの場合は、CreateDefaultBuilder
によって UseIISIntegration が呼び出され、次のことが行われます。
- ASP.NET Core モジュールの背後で実行するときにサーバーがリッスンする、ポートとベース パスを構成します。
- スタートアップ エラーをキャプチャするホストを構成します。
プロセス名
Process.GetCurrentProcess().ProcessName
から、w3wp
/iisexpress
(インプロセス) または dotnet
(アウト プロセス) がレポートされます。
Windows 認証などの多くのネイティブなモジュールは、アクティブなままです。 ASP.NET Core モジュールでアクティブな IIS モジュールの詳細については、「ASP.NET Core での IIS モジュール」を参照してください。
ASP.NET Core モジュールでは次のことも行えます。
- ワーカー プロセスの環境変数を設定する
- 起動に関する問題をトラブルシューティングするために、Stdout 出力をファイル ストレージに記録する
- Windows 認証トークンを転送する
ASP.NET Core