英語で読む

次の方法で共有


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

注意

これは、この記事の最新バージョンではありません。 現在のリリースについては、この記事の .NET 9 バージョンを参照してください。

警告

このバージョンの ASP.NET Core はサポート対象から除外されました。 詳細については、 .NET および .NET Core サポート ポリシーを参照してください。 現在のリリースについては、この記事の .NET 9 バージョンを参照してください。

重要

この情報はリリース前の製品に関する事項であり、正式版がリリースされるまでに大幅に変更される可能性があります。 Microsoft はここに示されている情報について、明示か黙示かを問わず、一切保証しません。

現在のリリースについては、この記事の .NET 9 バージョンを参照してください。

作成者: Tom DykstraSteve SmithStephen HalterChris Ross

ASP.NET Core アプリは、インプロセス HTTP サーバー実装を使用して実行されます。 サーバーの実装では、HTTP 要求がリッスンされ、 に構成されたHttpContextのセットとしてアプリに公開されます。

ASP.NET Core には、既定のクロスプラットフォーム HTTP サーバーである Kestrel サーバーが付属しています。

Kestrel

Kestrel サーバーは、クロスプラットフォーム HTTP サーバーの既定の実装です。 Kestrel を使用すると、最高のパフォーマンスとメモリ使用率が提供されますが、HTTP.sys の高度な機能の一部は提供されません。 詳細については、このドキュメントの「Kestrel と HTTP.sys」を参照してください。

Kestrel を使用して次のことを行います。

  • これ自体で、インターネットを含むネットワークから直接要求を処理するエッジ サーバーとして。

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

  • インターネット インフォメーション サービス (IIS)NginxApache などのリバース プロキシ サーバーと共に。 リバース プロキシ サーバーでは、インターネットから HTTP 要求を受け取り、Kestrel に転送します。

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

リバース プロキシ サーバーの有無に関わらず、いずれのホスティング構成もサポートされています。

Kestrel の構成ガイダンスと、リバース プロキシ構成で Kestrel を使用するときの情報については、「ASP.NET Core の Kestrel Web サーバー」をご覧ください。

ASP.NET Core には、既定のクロスプラットフォーム HTTP サーバーである Kestrel サーバーが付属しています。

Nginx と Kestrel

Kestrel のリバース プロキシ サーバーとして Linux で Nginx を使用する方法については、「Nginx 搭載の Linux で ASP.NET Core をホストする」を参照してください。

HTTP.sys

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 は、内部ネットワークにのみ公開されるアプリにも使用できます。

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

HTTP.sys の構成のガイダンスについては、「ASP.NET Core での HTTP.sys Web サーバーの実装」を参照してください。

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

IApplicationBuilder メソッドで使用可能な Startup.Configure は、ServerFeatures 型の IFeatureCollection プロパティを公開します。 Kestrel および HTTP.sys では、それぞれ単独の機能 IServerAddressesFeature のみが公開されますが、サーバーの実装が異なると追加機能が公開される場合があります。

IServerAddressesFeature を使用すれば、実行時にサーバー実装がバインドされたポートを見つけることができます。

カスタム サーバー

組み込みサーバーがアプリの要件に合わない場合は、カスタム サーバー実装を作成できます。 Nowin ベースの 実装の作成方法については、IServerを参照してください。 実装を必要とするのは、アプリで使用される機能のインターフェイスのみです。ただし、少なくとも IHttpRequestFeatureIHttpResponseFeature はサポートされている必要があります。

サーバーの起動

統合開発環境 (IDE) またはエディターでアプリが開始されると、サーバーが起動されます。

コマンド プロンプトからプロジェクトのフォルダーでアプリを起動すると、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 のサポート

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 以降を使用する必要があります。 詳細については、ご利用のサーバーの展開シナリオに関連するトピックを参照してください。

エンタープライズ Web アプリのパターン

信頼性が高く、セキュリティで保護され、パフォーマンスが高く、テスト可能でスケーラブルな ASP.NET Core アプリの作成に関するガイダンスについては、Enterprise Web アプリ パターンを参照してください。 パターンを実装する完全な運用品質のサンプル Web アプリを使用できます。

その他のリソース