Kestrel Web サーバーで外部からの接続を許可する
Kestrel Web サーバーで外部からの接続を許可する手順を紹介します。
動作の確認
IISにホストせずに、ASP.NET Coreアプリケーションを起動すると、下図のウィンドウが表示されKestrel Web サーバーが起動します。
起動したKestrel Web サーバーのリッスンURLとポート番号が表示されます。下図の例では、httpsのバインド先は
https://localhost
のポート 7159となり、
httpのバインド先は
http://localhost
のポート 5159となります。
ASP.NET Coreアプリケーションを実行しているマシンのWebブラウザで、
https://localhost:7159
にアクセスすると、ASP.NET Coreアプリケーションの実行結果を表示できます。
しかし、別のマシンで、ASP.NET Coreアプリケーションを実行しているマシンのアドレスとポート番号を指定してアクセスしても
下図の画面が表示され、
ERR_CONNECTION_REFUSED
によりアクセスが拒否されます。
対処方法
Kestrel Webサーバーはデフォルトの状態では、外部からのアクセスを受け付ける設定になっていないため、
設定を変更して外部からのアクセスを受け付ける動作に変更する必要があります。
設定の変更には、以下の方法があります。
方法1: appsettings.json の "urls" キーを記述する
プロジェクトの appsettings.json に "urls" キーを記述し、URLとポート番号を指定します。
以下の記述では、
http接続は、このサーバーのすべてのURLで、ポート番号5000でリッスンし、
https接続は、このーサーバーのすべてのURLで、ポート番号5001でリッスンします。
{
"urls": "http://*:5000;https://*:5001",
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}
方法2: appsettings.json の "Kestrel" キーを記述する
プロジェクトの appsettings.json に "Kestrel" キーを記述し、"Endpoint"の設定を記述します。
以下の記述では、
http接続は、このサーバーのすべてのURLで、ポート番号5000でリッスンし、
https接続は、このーサーバーのすべてのURLで、ポート番号5001でリッスンします。
{
"Kestrel": {
"Endpoints": {
"Http": {
"Url": "http://*:5000"
},
"Https": {
"Url": "https://*:5001"
}
}
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}
方法3: Webhost.UseUrls() メソッドを呼び出す
Program.cs ファイルで、WebApplicationBuilderオブジェクトの、WebHostオブジェクトのUseUrls() メソッドを呼び出し、
パラメーターにURL、ポート番号を設定する方法です。
builder.WebHost.UseUrls("http://*:5000;https://*:5001");
のコードでURLとポート番号を指定しています。
設定内容は先のappsettings.jsonに記述したものと同様で、
http接続は、このサーバーのすべてのURLで、ポート番号5000でリッスンし、
https接続は、このーサーバーのすべてのURLで、ポート番号5001でリッスンします。
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseUrls("http://*:5000;https://*:5001");
var app = builder.Build();
app.MapGet("/", () => "Hello ASP.NET Core World!");
app.Run();
実行結果
修正後、ASP.NET Coreアプリケーションを起動します。下図のウィンドウが表示されます。
リッスンURLが
http://[::]:5000
https://[::]:5001
の表示になっています。
ASP.NET Coreアプリケーションを実行しているマシンのWebブラウザで、
http://localhost:5000
にアクセスします。
アプリケーションの実行結果が表示されます。
https://localhost:5001
にアクセスした場合も結果が表示されます。
別のマシンから、
http://(マシンのホスト名またはIPアドレス):5000
でアクセスします。修正前は
ERR_CONNECTION_REFUSED
エラーで接続が拒否されましたが、アプリケーションの実行結果が表示されるようになりました。
https://(マシンのホスト名またはIPアドレス):5001
でアクセスした場合も結果が表示されます。
開発用のSSL証明書がインストールされていないため、SSLの警告は表示されます。
なお、アクセスした際に、
ERR_CONNECTION_TIMED_OUT
エラーで接続できない場合は、アプリケーションは接続できる状態ですが、
マシンのファイアウォールで接続を遮断している可能性がありますので、ファイアウォールの設定を変更して、アクセスするポート番号を許可するか、
実行しているASP.NET Coreアプリケーションを許可する必要があります。(または、ファイアウォールをオフにする。)
Kestrel Web サーバーで外部からの接続を許可する設定ができました。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用