ASP.NET Core での Web サーバーの実装Web server implementations in ASP.NET Core

作成者: Tom DykstraSteve SmithStephen HalterChris RossBy Tom Dykstra, Steve Smith, Stephen Halter, and Chris Ross

ASP.NET Core アプリは、インプロセス HTTP サーバー実装を使用して実行されます。An ASP.NET Core app runs with an in-process HTTP server implementation. サーバー実装は HTTP 要求をリッスンし、HttpContext に構成された要求機能のセットとしてアプリに公開します。The server implementation listens for HTTP requests and surfaces them to the app as sets of request features composed into an HttpContext.

ASP.NET Core には次の 2 つのサーバー実装が用意されています。ASP.NET Core ships two server implementations:

KestrelKestrel

Kestrel は、ASP.NET Core のプロジェクト テンプレートに含まれる既定の Web サーバーです。Kestrel is the default web server included in ASP.NET Core project templates.

Kestrel は単独で使用することも、IIS、Nginx、または Apache などのリバース プロキシ サーバーと併用することもできます。Kestrel can be used by itself or with a reverse proxy server, such as IIS, Nginx, or Apache. リバース プロキシ サーバーはインターネットから HTTP 要求を受け取り、事前にいくつかの処理を行ってから Kestrel に転送します。A reverse proxy server receives HTTP requests from the Internet and forwards them to Kestrel after some preliminary handling.

リバース プロキシ サーバーなしでインターネットと直接通信する Kestrel

IIS、Nginx、または Apache などのリバース プロキシ サーバーを介してインターネットと間接的に通信する Kestrel

リバース プロキシ サーバーの有無に関わらず、いずれの構成も有効で、ASP.NET Core 2.0 またはそれ以降のアプリ用にホスティング構成がサポートされている必要があります。Either configuration—with or without a reverse proxy server—is a valid and supported hosting configuration for ASP.NET Core 2.0 or later apps. 詳細については、「When to use Kestrel with a reverse proxy」 (Kestrel とリバース プロキシを使用するタイミング) を参照してください。For more information, see When to use Kestrel with a reverse proxy.

IIS、Nginx、および Apache を Kestrel やカスタム サーバー実装なしで使用することはできません。IIS, Nginx, and Apache can't be used without Kestrel or a custom server implementation. ASP.NET Core は、プラットフォーム間で一貫して動作できるように、独自のプロセスで実行するように設計されています。ASP.NET Core was designed to run in its own process so that it can behave consistently across platforms. IIS、Nginx、および Apache では独自のスタートアップ プロシージャと環境が指定されます。IIS, Nginx, and Apache dictate their own startup procedure and environment. これらのサーバー テクノロジを直接使用するには、ASP.NET Core を各サーバーの要件に適合させる必要があります。To use these server technologies directly, ASP.NET Core would need to adapt to the requirements of each server. Kestrel などの Web サーバー実装を使用することで、ASP.NET Core は異なるサーバー テクノロジでホストされている場合でもスタートアップ プロセスと環境を制御できます。Using a web server implementation, such as Kestrel, ASP.NET Core has control over the startup process and environment when hosted on different server technologies.

IIS と KestrelIIS with Kestrel

ASP.NET Core のリバース プロキシとして IIS または IIS Express を使用する場合、ASP.NET Core アプリは IIS ワーカー プロセスとは別のプロセスで実行されます。When using IIS or IIS Express as a reverse proxy for ASP.NET Core, the ASP.NET Core app runs in a process separate from the IIS worker process. IIS プロセスで、ASP.NET Core モジュールがリバース プロキシの関係を調整します。In the IIS process, the ASP.NET Core Module coordinates the reverse proxy relationship. ASP.NET Core モジュールの主な機能は、ASP.NET Core アプリを開始し、クラッシュ時にアプリを再始動し、HTTP トラフィックをアプリに転送することです。The primary functions of the ASP.NET Core Module are to start the ASP.NET Core app, restart the app when it crashes, and forward HTTP traffic to the app. 詳細については、ASP.NET Core モジュールに関するページを参照してください。For more information, see ASP.NET Core Module.

Nginx と KestrelNginx with Kestrel

Kestrel のリバース プロキシ サーバーとして Linux で Nginx を使用する方法については、「Host on Linux with Nginx」(Nginx による Linux でのホスト) を参照してください。For information on how to use Nginx on Linux as a reverse proxy server for Kestrel, see Host on Linux with Nginx.

Apache と KestrelApache with Kestrel

Kestrel のリバース プロキシ サーバーとして Linux で Apache を使用する方法については、「Apache による Linux でのホスト」を参照してください。For information on how to use Apache on Linux as a reverse proxy server for Kestrel, see Host on Linux with Apache.

HTTP.sysHTTP.sys

Windows で ASP.NET Core アプリを実行する場合は、HTTP.sys を Kestrel の代わりに使用できます。If ASP.NET Core apps are run on Windows, HTTP.sys is an alternative to Kestrel. 最適なパフォーマンスを得るには、通常は Kestrel をお勧めします。Kestrel is generally recommended for best performance. HTTP.sys は、アプリがインターネットに公開されていて、必要な機能が HTTP.sys でサポートされているものの、Kestrel ではサポートされていないシナリオで使用できます。HTTP.sys can be used in scenarios where the app is exposed to the Internet and required features are supported by HTTP.sys but not Kestrel. HTTP.sys の機能については、HTTP.sys に関するページを参照してください。For information on HTTP.sys features, see HTTP.sys.

インターネットと直接通信する HTTP.sys

HTTP.sys は、内部ネットワークにのみ公開されるアプリにも使用できます。HTTP.sys can also be used for apps that are only exposed to an internal network.

内部ネットワークと直接通信する HTTP.sys

ASP.NET Core サーバー インフラストラクチャASP.NET Core server infrastructure

Startup.Configure メソッドで使用できる IApplicationBuilder は、IFeatureCollection 型の ServerFeatures プロパティを公開します。The IApplicationBuilder available in the Startup.Configure method exposes the ServerFeatures property of type IFeatureCollection. Kestrel および HTTP.sys (ASP.NET Core 1.x の WebListener) は、それぞれ単独の機能 IServerAddressesFeature のみを公開しますが、サーバー実装が異なると追加機能が公開される場合があります。Kestrel and HTTP.sys (WebListener in ASP.NET Core 1.x) only expose a single feature each, IServerAddressesFeature, but different server implementations may expose additional functionality.

IServerAddressesFeature を使用すれば、実行時にサーバー実装がバインドされたポートを見つけることができます。IServerAddressesFeature can be used to find out which port the server implementation has bound at runtime.

カスタム サーバーCustom servers

組み込みサーバーがアプリの要件に合わない場合は、カスタム サーバー実装を作成できます。If the built-in servers don't meet the app's requirements, a custom server implementation can be created. Nowin ベースの IServer 実装の作成方法については、Open Web Interface for .NET (OWIN) のガイドを参照してください。The Open Web Interface for .NET (OWIN) guide demonstrates how to write a Nowin-based IServer implementation. 実装を必要とするのは、アプリで使用される機能のインターフェイスのみです。ただし、少なくとも IHttpRequestFeatureIHttpResponseFeature はサポートされている必要があります。Only the feature interfaces that the app uses require implementation, though at a minimum IHttpRequestFeature and IHttpResponseFeature must be supported.

サーバーの起動Server startup

Visual StudioVisual Studio for Mac、または Visual Studio Code を使用する場合、サーバーはアプリが統合開発環境 (IDE) によって開始されたときに起動します。When using Visual Studio, Visual Studio for Mac, or Visual Studio Code, the server is launched when the app is started by the Integrated Development Environment (IDE). Windows の Visual Studio では、IIS Express/ASP.NET Core モジュールまたはコンソールで、起動プロファイルを使用してアプリとサーバーを開始することができます。In Visual Studio on Windows, launch profiles can be used to start the app and server with either IIS Express/ASP.NET Core Module or the console. Visual Studio Code では、CoreCLR デバッガーをアクティブ化する Omnisharp によって、アプリとサーバーが開始します。In Visual Studio Code, the app and server are started by Omnisharp, which activates the CoreCLR debugger. Visual Studio for Mac を使用する場合は、アプリとサーバーが Mono の Soft-Mode Debugger によって開始します。Using Visual Studio for Mac, the app and server are started by the Mono Soft-Mode Debugger.

コマンド プロンプトからプロジェクトのフォルダーでアプリを起動する場合、dotnet run でアプリとサーバーが起動します (Kestrel および HTTP.sys のみ)。When launching an app from a command prompt in the project's folder, dotnet run launches the app and server (Kestrel and HTTP.sys only). この構成は、Debug (既定) または Release のどちらかに設定された -c|--configuration オプションによって指定されます。The configuration is specified by the -c|--configuration option, which is set to either Debug (default) or Release. 起動プロファイルが launchSettings.json ファイルに存在する場合は、--launch-profile <NAME> オプションを使用して起動プロファイルを設定します (DevelopmentProduction など)。If launch profiles are present in a launchSettings.json file, use the --launch-profile <NAME> option to set the launch profile (for example, Development or Production). 詳細については、dotnet run.NET Core の配布パッケージのトピックを参照してください。For more information, see the dotnet run and .NET Core distribution packaging topics.

その他の技術情報Additional resources