はじめに
「Kestrel Webサーバーって何?」
「ASP.NET Coreでアプリを起動すると出てくるけれど、IISやApacheとは何が違うの?」と気になっていませんか。
ASP.NET CoreでWebアプリを作成して実行すると、特別にWebサーバーを用意した覚えがなくてもブラウザからページを開けるため、Kestrelがどこで動いているのか分かりにくいですよね。
この記事では、Kestrel Webサーバーの役割からASP.NET Coreとの関係、基本的な起動方法や使い方まで紹介します。
Kestrelとは?

Kestrelは、ASP.NET CoreアプリケーションでHTTPリクエストを受け取り、処理結果をWebブラウザなどへ返すために使われるWebサーバーです。
ここでは、Kestrelの役割と具体的な処理内容、ASP.NET Coreで使われる代表的な構成を順番に説明します。
KestrelはASP.NET CoreのWebサーバー
Kestrelは、ASP.NET Coreに標準で組み込まれているWebサーバーです。
アプリケーションを起動するとHTTPやHTTPSの接続を受け付け、Webサーバーとして動作します。
Windowsだけでなく、LinuxやmacOSでも利用できます。
Kestrelは何をするWebサーバー?
Kestrelは、ブラウザなどから送られたHTTPリクエストを受け取り、ASP.NET Coreアプリケーションへ渡します。
アプリケーションで処理されたHTMLやJSONなどのレスポンスを、クライアントへ返すのもKestrelの役割です。
このように、クライアントとアプリケーションの間でHTTP通信を受け渡します。
Kestrelはどのような構成で使われる?
Kestrelは、HTTPやHTTPSのリクエストを直接受けるWebサーバーとして単独でも利用できます。
また、IISやNginxなどを前段に置き、受け取ったリクエストをKestrelへ転送する構成も一般的です。
この場合は、IISやNginxが外部からの接続を受け付け、KestrelがASP.NET Coreアプリケーションへリクエストを渡します。
Kestrelの主な特徴
Kestrelには、ASP.NET CoreのWebアプリケーションをさまざまな環境で動かすための機能が備わっています。
ここでは、Kestrelの対応OSや通信プロトコル、Webアプリケーションを処理する性能について順番に説明します。
クロスプラットフォームで利用できる
Kestrelは、Windows、Linux、macOSで動作するクロスプラットフォーム対応のWebサーバーです。
Windowsで開発したASP.NET Coreアプリケーションを、Linuxのサーバーで動かすといった使い方もできます。
OSが変わっても、同じKestrelを利用できるのが特徴です。
HTTPSやHTTP/2などに対応している
KestrelはHTTPとHTTPSに対応しており、TLS証明書を設定すれば通信を暗号化できます。
また、HTTP/1.1だけでなくHTTP/2にも対応しているため、用途に合わせた通信方式を利用できます。
使用するプロトコルは、Kestrelのエンドポイント設定で指定できます。
高性能なWebアプリケーション処理に対応できる
Kestrelは、多数のHTTPリクエストを効率よく処理できるよう設計されています。
受け取ったリクエストをASP.NET Coreアプリケーションへ渡し、処理されたレスポンスをクライアントへ返します。
複数の接続を扱えるため、継続的にアクセスを受けるWebアプリケーションにも利用できます。
Kestrelとリバースプロキシの違い
Kestrelは単体でもHTTPリクエストを受け付けるWebサーバーとして利用できますが、IISやNginxなどのリバースプロキシと組み合わせる構成もあります。
ここでは、Kestrel単体で使う場合と、IISやNginxを組み合わせる場合の構成を順番に説明します。
Kestrel単体でWebサーバーとして利用する
Kestrelは、IISやNginxを使わず、単体でHTTPやHTTPSのリクエストを受け付けることができます。
指定したIPアドレスとポートで接続を待ち受け、受信したリクエストをASP.NET Coreアプリケーションへ渡します。
処理されたレスポンスは、Kestrelからクライアントへ直接返されます。
IISやNginxをリバースプロキシとして組み合わせる
Kestrelの前段にIISやNginxを配置し、リバースプロキシとして利用することもできます。
外部からのリクエストをIISやNginxが受け取り、Kestrelで動作するASP.NET Coreアプリケーションへ転送する仕組みです。
処理後のレスポンスは、リバースプロキシを経由してクライアントへ返されます。
IISを使ってKestrelを公開する具体的な構成や設定方法を確認したい場合は、こちらも参考にしてください。
▶IISでWebサーバーを構築する方法|基本設定から公開まで解説
本番環境ではリバースプロキシを使う構成がある
本番環境でも、Kestrelの前段にIISやNginxなどを配置する構成が利用されています。
外部からの接続をリバースプロキシが受け付け、Kestrelは転送されたリクエストを処理します。
どちらの構成にするかは、アプリケーションの公開方法や運用環境に合わせて選びましょう。
Kestrelの基本的な使い方
Kestrelを使うと、ASP.NET Coreアプリケーションを起動してHTTPリクエストを受け付けられます。
ここでは、Kestrelでアプリを起動する方法からURL・ポート、HTTPSの基本設定まで順番に説明します。
KestrelでASP.NET Coreアプリを起動する
ASP.NET Coreアプリケーションは、プロジェクトのディレクトリでdotnet runを実行すると起動できます。
アプリとともにKestrelが動作し、設定されたURLとポートでリクエストの待ち受けを開始します。
表示されたURLをブラウザで開けば、ASP.NET Coreアプリケーションへアクセスできます。
URLとポートを設定する
Kestrelが待ち受けるURLとポートは、ASP.NET Coreアプリケーションの設定から指定できます。
たとえばhttp://localhost:5000を指定すると、ローカル環境の5000番ポートでHTTPリクエストを受け付けます。
設定後は同じURLをブラウザで開き、正しく接続できるか確認しましょう。
HTTPSを利用する場合の基本設定
KestrelでHTTPSを利用する場合は、HTTPS用のURLとサーバー証明書を設定します。
開発環境ではASP.NET Coreの開発用証明書を使い、ローカル環境でHTTPS通信を確認できます。
本番環境では、利用するドメインに対応した証明書を設定してHTTPS接続を受け付けます。
Kestrelを使うときの注意点
Kestrelを利用するときは、アプリケーションを起動できるだけでなく、どのポートとIPアドレスで待ち受けるかを確認する必要があります。
ここでは、Kestrelを使う前に確認したい公開範囲やセキュリティ、エンドポイント設定について順番に説明します。
待ち受けるポートと公開範囲を確認する
Kestrelを起動するときは、HTTPやHTTPSを待ち受けるIPアドレスとポート番号を確認します。
localhostは同じ端末からの接続に限られますが、0.0.0.0を指定するとすべてのIPv4アドレスで接続を待ち受けます。
意図しない範囲へ公開しないよう、利用環境に合わせて設定しましょう。
インターネット公開では構成とセキュリティを確認する
Kestrelでアプリをインターネットへ公開する場合は、HTTPSを有効にして通信を暗号化します。
IISやNginxを前段に置く場合は、外部からの接続を受けてKestrelへ転送する構成になります。
公開前に、開放するポートや証明書、Kestrelへの接続経路を確認しておきましょう。
HTTPSで公開するときに必要なSSL証明書の仕組みや設定が分からない場合は、こちらも確認しておくと安心です。
▶SSL証明書とは?仕組みや種類・設定方法をわかりやすく解説
高度なエンドポイント設定は用途に応じて行う
Kestrelでは、複数のIPアドレスやポートを使ったエンドポイントを設定できます。
HTTPとHTTPSで異なるポートを使ったり、エンドポイントごとに通信プロトコルを指定したりすることも可能です。
複数の接続先が必要な場合は、用途に合わせて必要な設定を追加しましょう。
まとめ
Kestrelは、ASP.NET CoreアプリケーションでHTTPやHTTPSのリクエストを受け取り、処理結果をクライアントへ返すWebサーバーです。
Windows・Linux・macOSで利用でき、単体で公開するだけでなく、IISやNginxなどのリバースプロキシと組み合わせる構成にも対応しています。
基本的にはASP.NET Coreアプリを起動するとKestrelも動作し、設定したURLやポートでリクエストの待ち受けを開始します。
実際に利用するときは、待ち受けるIPアドレスとポート、HTTPSの証明書、インターネットへの公開範囲を確認し、用途に合った構成で運用しましょう。











