events
ASP.NET Core での Web サーバーの実装
注意
これは、この記事の最新バージョンではありません。 現在のリリースについては、この記事の .NET 9 バージョンを参照してください。
警告
このバージョンの ASP.NET Core はサポート対象から除外されました。 詳細については、 .NET および .NET Core サポート ポリシーを参照してください。 現在のリリースについては、この記事の .NET 9 バージョンを参照してください。
重要
この情報はリリース前の製品に関する事項であり、正式版がリリースされるまでに大幅に変更される可能性があります。 Microsoft はここに示されている情報について、明示か黙示かを問わず、一切保証しません。
現在のリリースについては、この記事の .NET 9 バージョンを参照してください。
作成者: Tom Dykstra、Steve Smith、Stephen Halter、Chris Ross
ASP.NET Core アプリは、インプロセス HTTP サーバー実装を使用して実行されます。 サーバーの実装では、HTTP 要求がリッスンされ、 に構成されたHttpContextのセットとしてアプリに公開されます。
ASP.NET Core には、既定のクロスプラットフォーム HTTP サーバーである Kestrel サーバーが付属しています。
Kestrel サーバーは、クロスプラットフォーム HTTP サーバーの既定の実装です。 Kestrel を使用すると、最高のパフォーマンスとメモリ使用率が提供されますが、HTTP.sys の高度な機能の一部は提供されません。 詳細については、このドキュメントの「Kestrel と HTTP.sys」を参照してください。
Kestrel を使用して次のことを行います。
これ自体で、インターネットを含むネットワークから直接要求を処理するエッジ サーバーとして。
インターネット インフォメーション サービス (IIS)、Nginx、Apache などのリバース プロキシ サーバーと共に。 リバース プロキシ サーバーでは、インターネットから HTTP 要求を受け取り、Kestrel に転送します。
リバース プロキシ サーバーの有無に関わらず、いずれのホスティング構成もサポートされています。
Kestrel の構成ガイダンスと、リバース プロキシ構成で Kestrel を使用するときの情報については、「ASP.NET Core の Kestrel Web サーバー」をご覧ください。
ASP.NET Core には、既定のクロスプラットフォーム HTTP サーバーである Kestrel サーバーが付属しています。
Kestrel のリバース プロキシ サーバーとして Linux で Nginx を使用する方法については、「Nginx 搭載の Linux で ASP.NET Core をホストする」を参照してください。
Windows 上で ASP.NET Core アプリを実行する場合は、HTTP.sys を Kestrel の代わりに使用できます。 Kestrel で使用できない機能がアプリに必要な場合を除き、HTTP.sys よりも Kestrel をお勧めします。 詳細については、「HTTP.sys web server implementation in ASP.NET Core」 (ASP.NET Core への HTTP.sys Web サーバーの実装) を参照してください。
HTTP.sys は、内部ネットワークにのみ公開されるアプリにも使用できます。
HTTP.sys の構成のガイダンスについては、「ASP.NET Core での HTTP.sys Web サーバーの実装」を参照してください。
IApplicationBuilder メソッドで使用可能な Startup.Configure
は、ServerFeatures 型の IFeatureCollection プロパティを公開します。 Kestrel および HTTP.sys では、それぞれ単独の機能 IServerAddressesFeature のみが公開されますが、サーバーの実装が異なると追加機能が公開される場合があります。
IServerAddressesFeature
を使用すれば、実行時にサーバー実装がバインドされたポートを見つけることができます。
組み込みサーバーがアプリの要件に合わない場合は、カスタム サーバー実装を作成できます。 Nowin ベースの 実装の作成方法については、IServerを参照してください。 実装を必要とするのは、アプリで使用される機能のインターフェイスのみです。ただし、少なくとも IHttpRequestFeature と IHttpResponseFeature はサポートされている必要があります。
統合開発環境 (IDE) またはエディターでアプリが開始されると、サーバーが起動されます。
- Visual Studio: 起動プロファイルを使用して、IIS Express/ASP.NET Core モジュールまたはコンソールで、アプリとサーバーを開始できます。
- Visual Studio Code: CoreCLR デバッガーをアクティブにする Omnisharp によって、アプリとサーバーが開始されます。
- Visual Studio for Mac: アプリとサーバーは、Mono Soft-Mode Debugger によって開始されます。
コマンド プロンプトからプロジェクトのフォルダーでアプリを起動すると、dotnet run によってアプリとサーバーが起動されます (Kestrel および HTTP.sys のみ)。 この構成は、-c|--configuration
(既定) または Debug
のどちらかに設定された Release
オプションによって指定されます。
launchSettings.json
ファイルは、dotnet run
または Visual Studio などのツールに組み込まれたデバッガーを使用してアプリを起動するときの構成を提供します。 起動プロファイルが launchSettings.json
ファイルに存在する場合は、--launch-profile {PROFILE NAME}
コマンドで dotnet run
オプションを使用するか、Visual Studio でプロファイルを選択します。 詳しくは、「dotnet run」および「.NET Core の配布パッケージ」をご覧ください。
HTTP/2 は、次の展開シナリオでの ASP.NET Core でサポートされます。
- Kestrel
- オペレーティング システム
- Windows Server 2016/Windows 10 以降†
- OpenSSL 1.0.2 以降を使用した Linux (Ubuntu 16.04 以降など)
- macOS 10.15 以降
- ターゲット フレームワーク: .NET Core 2.2 以降
- オペレーティング システム
- HTTP.sys
- Windows Server 2016/Windows 10 以降
- ターゲット フレームワーク: HTTP.sys の展開には適用できません。
- IIS (インプロセス)
- Windows Server 2016/Windows 10 以降、IIS 10 以降
- ターゲット フレームワーク: .NET Core 2.2 以降
- IIS (アウトプロセス)
- Windows Server 2016/Windows 10 以降、IIS 10 以降
- 一般向けのエッジ サーバー接続では HTTP/2 を使用しますが、Kestrel へのリバース プロキシ接続では HTTP/1.1 を使用します。
- ターゲット フレームワーク: IIS アウトプロセスの展開には適用できません。
†Kestrel では、Windows Server 2012 R2 および Windows 8.1 上での HTTP/2 のサポートは制限されています。 サポートが制限されている理由は、これらのオペレーティング システムで使用できる TLS 暗号のスイートのリストが制限されているためです。 TLS 接続をセキュリティで保護するためには、楕円曲線デジタル署名アルゴリズム (ECDSA) を使用して生成した証明書が必要になる場合があります。
- Kestrel
- オペレーティング システム
- Windows Server 2016/Windows 10 以降†
- OpenSSL 1.0.2 以降を使用した Linux (Ubuntu 16.04 以降など)
- 将来のリリースでは HTTP/2 が macOS 上でサポートされるようになります。
- ターゲット フレームワーク: .NET Core 2.2 以降
- オペレーティング システム
- HTTP.sys
- Windows Server 2016/Windows 10 以降
- ターゲット フレームワーク: HTTP.sys の展開には適用できません。
- IIS (インプロセス)
- Windows Server 2016/Windows 10 以降、IIS 10 以降
- ターゲット フレームワーク: .NET Core 2.2 以降
- IIS (アウトプロセス)
- Windows Server 2016/Windows 10 以降、IIS 10 以降
- 一般向けのエッジ サーバー接続では HTTP/2 を使用しますが、Kestrel へのリバース プロキシ接続では HTTP/1.1 を使用します。
- ターゲット フレームワーク: IIS アウトプロセスの展開には適用できません。
†Kestrel では、Windows Server 2012 R2 および Windows 8.1 上での HTTP/2 のサポートは制限されています。 サポートが制限されている理由は、これらのオペレーティング システムで使用できる TLS 暗号のスイートのリストが制限されているためです。 TLS 接続をセキュリティで保護するためには、楕円曲線デジタル署名アルゴリズム (ECDSA) を使用して生成した証明書が必要になる場合があります。
- Kestrel
- オペレーティング システム
- Windows Server 2016/Windows 10 以降†
- OpenSSL 1.0.2 以降を使用した Linux (Ubuntu 16.04 以降など)
- 将来のリリースでは HTTP/2 が macOS 上でサポートされるようになります。
- ターゲット フレームワーク: .NET Core 2.2 以降
- オペレーティング システム
- HTTP.sys
- Windows Server 2016/Windows 10 以降
- ターゲット フレームワーク: HTTP.sys の展開には適用できません。
- IIS (インプロセス)
- Windows Server 2016/Windows 10 以降、IIS 10 以降
- ターゲット フレームワーク: .NET Core 2.2 以降
- IIS (アウトプロセス)
- Windows Server 2016/Windows 10 以降、IIS 10 以降
- 一般向けのエッジ サーバー接続では HTTP/2 を使用しますが、Kestrel へのリバース プロキシ接続では HTTP/1.1 を使用します。
- ターゲット フレームワーク: IIS アウトプロセスの展開には適用できません。
†Kestrel では、Windows Server 2012 R2 および Windows 8.1 上での HTTP/2 のサポートは制限されています。 サポートが制限されている理由は、これらのオペレーティング システムで使用できる TLS 暗号のスイートのリストが制限されているためです。 TLS 接続をセキュリティで保護するためには、楕円曲線デジタル署名アルゴリズム (ECDSA) を使用して生成した証明書が必要になる場合があります。
- HTTP.sys
- Windows Server 2016/Windows 10 以降
- ターゲット フレームワーク: HTTP.sys の展開には適用できません。
- IIS (アウトプロセス)
- Windows Server 2016/Windows 10 以降、IIS 10 以降
- 一般向けのエッジ サーバー接続では HTTP/2 を使用しますが、Kestrel へのリバース プロキシ接続では HTTP/1.1 を使用します。
- ターゲット フレームワーク: IIS アウトプロセスの展開には適用できません。
HTTP/2 接続では、アプリケーション レイヤー プロトコルのネゴシエーション (ALPN) および TLS 1.2 以降を使用する必要があります。 詳細については、ご利用のサーバーの展開シナリオに関連するトピックを参照してください。
信頼性が高く、セキュリティで保護され、パフォーマンスが高く、テスト可能でスケーラブルな ASP.NET Core アプリの作成に関するガイダンスについては、Enterprise Web アプリ パターンを参照してください。 パターンを実装する完全な運用品質のサンプル Web アプリを使用できます。
ASP.NET Core に関するフィードバック
ASP.NET Core はオープンソース プロジェクトです。 フィードバックを提供するにはリンクを選択します。
その他のリソース
トレーニング
モジュール
ASP.NET Core を使用した .NET Web 開発の概要 - Training
このモジュールでは、ASP.NET Core を使用した .NET Web 開発について、それがどのようなものであるかや、どのような場合に使用するかを含めて学習します。
認定資格
Microsoft Certified: Windows Server Hybrid Administrator Associate - Certifications
Windows Server ハイブリッド管理者は、Windows Server 環境と Azure サービスを統合し、オンプレミス ネットワークで Windows Server を管理します。
ドキュメント
-
ASP.NET Core の Kestrel Web サーバー
ASP.NET Core 用のクロスプラットフォーム Web サーバーである Kestrel について説明します。
-
ASP.NET Core での HTTP.sys Web サーバーの実装
Windows 上の ASP.NET Core 用 Web サーバーである HTTP.sys について説明します。 HTTP.sys は、Http.sys カーネル モード ドライバーに基づいて構築された、IIS なしで直接インターネットに接続するために使用できる Kestrel の代替製品です。
-
ASP.NET Core Kestrel Web サーバーでリバース プロキシを使用するタイミング
ASP.NET Core 向けのクロスプラットフォーム Web サーバーである Kestrel の前で、リバース プロキシを使用するタイミングについて学習します。