ケストレル Web サーバーがローカルホスト以外の要求をリッスンするようにするにはどうすればよいですか?

Kestrel サーバーが使用する既定の構成ファイルは hosting.json です。 .名前は、異なるベータ版で複数回変更されました。今使うなら project.json 次の "command" で セクション

"commands": {
    "web": "Microsoft.AspNet.Server.Kestrel"
}

次に、コマンドラインからサーバーを起動するときに

dnx web

ファイル hosting.json 読まれます。ファイル

{
    "server.urls": "http://0.0.0.0:5000"
}

すべてのIP4アドレスで5000をリッスンするようにサーバーを構成します。構成

{
    "server.urls": "http://::5000;http://0.0.0.0:5000"
}

IP4 と IP6 アドレスの両方で 5000 をリッスンするよう通知します。

使用方法 ASPNET_ENV によって代替構成ファイルを指定できます 環境変数または --config myconfig1.json の使用による (または config=myconfig1.json )。たとえば、使用できます

SET ASPNET_ENV=Development

hosting.Development.json を作成する 特定の構成を持つファイル。または、 project.json を使用できます と

"commands": {
    "web": "Microsoft.AspNet.Server.Kestrel"
    "webProd": "Microsoft.AspNet.Server.Kestrel --config prod.json"
}

使用法でサーバーを起動します

dnx webProd

追加のリッスンと登録を許可する必要がある可能性があることも忘れないでください (dnx web を開始するには) )。これは、ファイアウォールと、新しい TCP/HTTP ポートをリッスンするローカル セキュリティのために必要です。以下のようなものは、すべての人 (IPv4 および IPv6) に対して 5000 ポートのローカル登録とリッスンを行う必要があります:

netsh http add iplisten ipaddress=0.0.0.0:5000
netsh http add iplisten ipaddress=::5000
netsh http add urlacl url=http://+:5000/ user=\Everyone

より安全にするために、上記の構成を調整して最小限の権限を付与することができます。

更新: ありがとう@BlaneBunderson。 IP アドレスの代わりに * を使用できます (http://*:5000 など)。 ) 任意で聞く 任意のインターフェイスからの IP4 および IP6 アドレス。注意してこれらを使用しないでください

  • http://*:5000;http://::5000
  • http://::5000;http://*:5000
  • http://*:5000;http://0.0.0.0:5000
  • http://*:5000;http://0.0.0.0:5000

IP6 アドレス :: を登録する必要があるためです。 または IP4 アドレス 0.0.0.0 2回 .

アナウンス対応

今後、挙動が変わる可能性はあると思います。したがって、*:5000 のみを使用することをお勧めします 、 0.0.0.0:5000 そして ::5000 任意の IT アドレスを登録するためのフォーム。

更新 2: ASP.NET Core RC2 は、既定値を読み込む動作を変更します (発表を参照)。 Main を変更する必要があります hosting.json から設定を読み込む およびコマンド ライン パラメータ。以下は使用例です

public static void Main(string[] args)
{
    var config = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("hosting.json", optional: true)
        .AddEnvironmentVariables(prefix: "ASPNETCORE_")
        .AddCommandLine(args)
        .Build();

    var host = new WebHostBuilder()
        .UseUrls("http://*:1000", "https://*:1234", "http://0.0.0.0:5000")
        .UseEnvironment("Development")
        .UseConfiguration(config)
        .UseKestrel()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseIISIntegration()
        .UseStartup<Startup>()
        .Build();

    host.Run();
}

上記のコードは 3 つのバインディングを使用しています:"http://*:1000""https://*:1234""http://0.0.0.0:5000" デフォルトでは、デフォルトでデフォルトのポート 5000 を使用する代わりに (正確には http://localhost:5000 を使用します) )。 .UseConfiguration(config)の呼び出し 後に作成されます .UseUrls .したがって、構成は hosting.json からロードされます またはコマンドラインがデフォルトのオプションを上書きします。 .SetBasePath(Directory.GetCurrentDirectory()) を削除すると 行、次に hosting.json アプリケーション dll がコンパイルされるのと同じディレクトリからロードされます (例:bin\Debug\netcoreapp1.0 ).

のような実行を使用できます

dotnet.exe run --server.urls=http://0.0.0.0:5000

デフォルト設定を上書きする (UseUrls から) ) と "server.urls" の設定 hosting.json のプロパティ

同様に、環境変数を設定することで ULR 設定を上書きできます

set ASPNETCORE_SERVER.URLS=http://localhost:12541/

dotnet.exe run を使用したアプリケーションのデフォルトの開始 http://localhost:12541/ を使用します

HTTPS バインディングの使用例はこちらにあります。

備考: 環境変数の名前が ASPNETCORE_SERVER.URLS から変更されました ASPNETCORE_URLS へ ASP.NET のそれ以降のバージョン (ASP.NET Core 3.1 のドキュメントはこちらを参照してください)。


RC2 では、project.json のコマンド セクションは使用されなくなりました。 Kestrel に、hosting.json をまだ取得してもらっていませんが、新しい WebHostBuilder を作成して構成するアプリケーションのメインに、プログラムでポートを設定できます。以下のサンプルのように .UseUrls() メソッドを追加するだけです

    public static void Main(string[] args)
    {
        var host = new WebHostBuilder()
            .UseUrls("http://0.0.0.0:5000/")
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .Build();

        host.Run();
    }

asp.net コア 2.1 以降を使用している場合は、appsettings.json の構成セクションを変更してください。

"Kestrel": {
  "EndPoints": {
    "Http": {
      "Url": "http://0.0.0.0:5002"
    }
  }
},