Kestrelとは(vs IIS / Express)


158

ケストレルWebサーバーとは何ですか?それはIIS / IIS Expressとどのように関連していますか?

IIS Expressでアプリを開発し、IIS Webサーバーでそれらをホストしています。ASP.NET Coreでは依存関係がMicrosoft.AspNetCore.Server.Kestrelあり、スタートアップには依存関係があります.UseServer("Microsoft.AspNetCore.Server.Kestrel")。しかし、自分のWebサイトを実行しても、システムトレイにIIS Expressアイコンが表示されます。IIS ExpressとKestrelのどちらを使用しているか尋ねられましたが、何を言うべきかわかりませんでした。

AzureのPCとホストで開発する場合、クロスプラットフォームの要件はないためneed、ケストレルすら混乱しますが、代替手段がないようです。最も単純なサンプルでもKestrelを使用しています。


この新しいテクノロジーについて質問がある場合は、問題のプロジェクトのGitHubページから始めて、そのWikiを確認してください。ASP.NETリポジトリのこのサーバーのwikiページに出くわします
メイソン2016

11
もちろん、それからのようなものに出くわしますThis document is now out of date. For up-to-date ASP.NET Core documentation go to: http://docs.asp.net。おっとっと。

回答:


115

ケストレルとは

本格的なWebサーバーです。Kestrelだけを使用してASP.NET Coreアプリケーションを実行できます。

しかし、自分のWebサイトを実行しても、システムトレイにIIS Expressアイコンが表示されます

ASP.NETアプリケーションでは、おそらくwwwrootディレクトリに、これを含むweb.configが表示されます。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
    <handlers>
    <add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
    </handlers>
    <httpPlatform processPath="%DNX_PATH%" arguments="%DNX_ARGS%" stdoutLogEnabled="false" startupTimeLimit="3600"/>
</system.webServer>
</configuration>

これはHttpPlatformHandlerです。基本的に、これはすべてのリクエストをKestrelに転送することです。IIS Express(さらに言えばIIS)はASP.NET自体を実行しなくなります。代わりに、ケストレルからリクエストとレスポンスをやり取りするだけのプロキシとして機能します。IISを使用する利点はまだあります。具体的には、セキュリティ構成、カーネルレベルのキャッシュなどが提供されます。


5
ASP.Netコアyoutu.be/e2qZvabmSvo
実際

4
(HttpPlatformHandlerの代わりに)ASP.NET Core Moduleが導入されたため、この回答は少し古くなっています。私は、より多くのストーリーと関連製品を含む別の回答も提供しました。
Lex Li

171

WindowsとIISのみを使用している場合でも、Kestrelが登場する理由を理解できるように、いくつかの履歴を含む別の答えを提供したいと思います。

2000年より前のASP.NET開発の最初の段階で、MicrosoftはASP.NET WebFormsアプリをホストするための2つの要素を作成しました。

  • Cassiniは、後にVisual StudioのASP.NET開発サーバーになりました。これは、に基づいてC#で記述された完全に管理されたWebサーバーですHttpListener。もちろん、それは開発専用であるため、多くの機能が実装されることはありませんでした。マイクロソフトがCassiniのソースコードを一般に公開したため、コードベースを分岐してより多くの機能を追加したサードパーティが存在し、Cassiniファミリーが始まりました。
  • IISでのASP.NETサポート(リビジョン1)。IISは4.0と5.0 / 5.1であり、アプリケーションプールのようなものはなかったため、ASP.NETには独自のワーカープロセス(aspnet_wp.exe)さえありました。

したがって、Webアプリを開発するにはCassiniを使用し、展開するにはIISを使用します。

  • IIS 6でのアプリケーションプールの導入には、ASP.NET側でいくつかの変更が必要だったため、aspnet_wp.exe廃止され、に置き換えられましたaspnet_isapi.dll。これは、IISリビジョン2でのASP.NETサポートと見なすことができます。したがって、ASP.NETアプリはIISワーカープロセスでホストされていますw3wp.exe

  • IIS 7で、交換に必要な更なる変更、上記集積パイプラインの導入aspnet_isapi.dllwebengine4.dll。これは、IISリビジョン3でのASP.NETサポートと見なすことができます。ASP.NETとIISのパイプラインは統合されています。

ASP.NETははるかに複雑になり、IISと緊密に統合されているので、Cassiniはその古さを示し始め、次第にIIS Express(ユーザーモードライトIIS)に置き換わりました。

したがって、多くの場合、IISが遅いと非難するときは、実際にはASP.NETを非難する必要があります。ASP.NETのないIIS自体はかなり高速で安定していますが、ASP.NETは十分なパフォーマンスメトリックを考慮して開発されていません(WebFormsはかなりの生産性とRADに焦点を当てているため)。

その後、2014年11月にASP.NET 5(後でASP.NET Coreに名前が変更されました)が発表され、クロスプラットフォームテクノロジーになりました。明らかに、Microsoftは、Windows、macOS、およびLinuxをサポートする新しい設計を必要としており、IIS以外のすべての主要なWebサーバー、nginx / Apache(または他のWebサーバー)を検討する必要があります。

MicrosoftがNodeJSからかなりのことを学び、Kestrelを設計および開発したことに多くの人が同意すると思います(libuv最初はベースでしたが、すぐに他のテクノロジーに移行する可能性があります)。最初はカッシーニのような軽量のWebサーバーですが、後になってより多くの機能が追加されます(別の回答がコメントしたように、はるかに多くの機能があるため、完全なWebサーバーとして扱うことができます)。完全に管理されていますが(いくつかのネイティブな依存関係が存在します)、CassiniのようなおもちゃのWebサーバーではなくなりました。

では、なぜKestrelを使用できないのでしょうか。IIS ExpressおよびIIS、nginx、Apacheがまだ必要なのはなぜですか?これは主に、今日のインターネット慣行の結果です。ほとんどのWebサイトは、リバースプロキシを使用してWebブラウザーから要求を受け取り、バックグラウンドでアプリケーションサーバーに転送します。

  • IIS Express / IIS / nginx / Apacheはリバースプロキシサーバーです
  • Kestrel / NodeJS / Tomcatなどがアプリケーションサーバーです。

別の回答には、Microsoftのドキュメントへのリンクがすでに示されているので、見てみることができます。

Microsoftは、最初にHttpPlatformHandlerを開発して、IISをJava / Pythonなどの十分なリバースプロキシにするため、ASP.NET Coreで使用することを計画しました。開発中に問題が発生し始めたため、Microsoftは後にASP.NET Core専用のASP.NET Coreモジュールを作成しました。これは、IISリビジョン4でのASP.NETサポートです。

ASP.NET Core 2.2以降、IIS用ASP.NET Coreモジュール(バージョン2)はw3wp.exe、ASP.NET 2.x / 4.xと非常によく似たIISワーカープロセス()内で.NET Core環境をホストできます。このモードは「IISインプロセスホスティング」と呼ばれます。IISリビジョン5でのASP.NETサポートと見なすことができます。

まあ、かなり長いですが、私は必要なすべての作品をまとめて、あなたがそれを楽しんでくれることを願っています。


1
素敵な答え。しかし、IISでケストレルを使用することが「今日のインターネット実践の結果」であると単純に言うことはできません。リバースプロキシの使用には多くの根拠があります。ここでいくつか言及しておくとよいでしょう。
Nilay Vishwakarma

13
「リバースプロキシの使用には多くの根拠があります」は、独自の質問と回答に属します。通常、人々はグーグルに尋ねることで良いリソースを見つけることができるので、私はそれをすでに十分に長いこの答えに追加しませんでした。
Lex Li

12

ms docsから:https : //docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?tabs=aspnetcore2x

Kestrelは、クロスプラットフォームの非同期I / Oライブラリであるlibuvに基づくASP.NET Core用のクロスプラットフォームWebサーバーです。Kestrelは、ASP.NET Coreプロジェクトテンプレートにデフォルトで含まれているWebサーバーです。

Kestrelを単独で、またはIIS、Nginx、Apacheなどのリバースプロキシサーバーとともに使用できます。リバースプロキシサーバーは、インターネットからHTTPリクエストを受信し、いくつかの予備処理の後にそれらをKestrelに転送します。


更新:.netコア2.1、Kestrelはlibuvの場合、代わりにマネージソケットを使用します

asp.net core 2.1のドキュメントから:https : //docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel? view=aspnetcore-2.1#transport-configuration

ASP.NET Core 2.1のリリースにより、KestrelのデフォルトのトランスポートはLibuvベースではなく、マネージソケットに基づいています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.