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


82

c#、asp.net 5、mvc6アプリをWindows2008サーバーに展開しました。起動しましたdnx webが、ポート5000をリッスンしており、ローカルコンピューターからアクセスすると正常に動作します。

ローカルホスト以外のリクエストをリッスンするにはどうすればよいですか?

PSこの質問はこれと重複していません... hosting.iniが実際に.ini形式であった場合、RC1より前のasp.netを参照します。さて、それはJSONであり、実際に何が含まれるべきかについてのドキュメントを見つけることができません。

PPS本当の解決策は、リンクされた質問に対する受け入れられない回答にありますが、大きな警告があります。手順:

  1. リンクされた回答に従ってproject.jsonを変更します。
  2. プロジェクトをサーバーに公開します。
  3. サーバーで、... \ approot \ src \ YourProjectフォルダーに移動し、そこでコマンドウィンドウを開きます。
  4. 実行dnx web-失敗します
  5. 実行 dnu restore
  6. 'dnubuild`を実行します
  7. 'dnxweb`を実行します-Webサーバーは正常に起動するはずです

PSこの質問に賛成する人々のために。それは時代遅れです。非常に時代遅れです!

これは、.NETCoreの初期バージョンに適用されました。質問と回答は、フレームワークの現在のバージョン(2.x、3.xなど)には確かに適用できません。



リンクされた質問の2番目の回答は、JSON形式に関するものです。それはあなたにも役に立たないのですか?
chue x 2015

@chuex試してみましたが、最初は起動時にWebサーバーがクラッシュしました。理由はわかりません。そして、私でしたdnu restoreが続き、dnu buildその後、dnx web適切にWebサーバーを開始しました。なぜそれが起こっているのか分かりませんが、少なくとも私はそれを機能させることができます。最終リリースの前に対処する必要のあるバグが間違いなくあります。今のところ、これは回避策です。
AngryHacker 2015

1
解決策を反映するために質問ごとに編集しました。
AngryHacker 2015

@AngryHacker:server.urlsアプリケーション構成ファイルまたはコマンドラインパラメーターでパラメーターを指定できます。値には、セミコロンで区切られた複数の値を含めることができますここを参照してください。構成のファイル名はhosting.jsonにすることができますが、jsonだけではありません。問題を参照してください。--config設定ファイル名を指定するために使用できます
Oleg

回答:


114

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回登録する必要があるためです。

発表に対応

技術的には、「localhost」または有効なIPv4またはIPv6アドレスではないホスト名があると、Kestrelはすべてのネットワークインターフェイスにバインドされます。

将来的には行動が変わる可能性があると思います。したがって、私は使用することをお勧めします*:50000.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またはコマンドラインからロードされた構成はデフォルトオプションを上書きします。1.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.URLSASPNETCORE_URLSASP.NETのそれ以降のバージョンで(参照ここではASP.NETコア3.1のマニュアルを参照して)。


1
また、あなたは"server.urls"を使用することができます: "のhttp:// *:5000"ではなく"server.urls"の: " 0.0.0.0:5000 "(。個人的に、私は*はもう少し理にかなっていると思う)
Blaneバンダーソン2015

@BlaneBunderson:あなたの提案をありがとう!私はそれhttp://*:5000がと同じでhttp://::5000;http://0.0.0.0:5000あり、ではないことを追加する必要 がありhttp://0.0.0.0:5000ます。IPv4とIPv6の両方を強制的にリッスンします。使用法http://*:5000;http://::5000またはで確認できhttp://::5000;http://*:5000ます。2番目のアドレスの登録中に、「Microsoft.AspNet.Server.Kestrel.Networking.UvException:エラー-4091EADDRINUSEアドレスが既に使用されています」というエラーが発生します。一部のシナリオでは、IPv4とIPv6の両方の登録が適切ですが、別のシナリオでは適切ではありません。いずれにせよ、その方法について言及するのは良いことです。
オレグ2015

RC2の優れたアップデート、詳細な説明に感謝
Trygve 2016年

「アップデート2」の例では.UseStartup<Startup>()オーバーライド.UseConfiguration(config)しませんか?
ニックス2016

その環境変数にタイプミスがあります。ASPNETCORE_URLSである必要があります
nrjohnstone

33

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();
    }

3
これは大きな助けになりました。.UseUrls("http://*:5000")代わりに使用し、VirtualBoxで空のホストIPを使用して5000をポート転送し、最終的にMacからDockerでホストされている.NETCoreエンドポイントにアクセスできます。甘い!
Mark Larter 2016年

RC2でhosting.jsonを使用する方法と詳細な説明については、上記のOlegの回答、特に「Updated 2」をお読みください
Trygve

2
1.0.0にも適用可能-preview2-003121、
docker

18

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

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

これは、VSCodeまたはVisualStudio forMacのいずれかから実行しているときにも一貫して機能します。 ASPNETCORE_URLS私には
うまくいき

9

ASP.NET CoreアプリケーションをDockerコンテナー内に配置しようとしている場合(これは、ローカルホスト以外のアドレスをリッスンする必要がある私のユースケースでした)、このユースケースは既にMicrosoftによってまとめられていることに注意してください。あなたはhttps://hub.docker.com/r/microsoft/aspnetcore/で完全な栄光を見ることができます

現在(v1.0.1)では、この問題を解決するための重要な魔法は、ソースDockerfileにURL環境変数設定が含まれており、アプリケーションがこれをオーバーライドしようとしないことです。(実際、コンテナー化されたアプリケーションは、それが実行される環境について、内部的にできるだけ少なく主張する必要があります。)

ENV ASPNETCORE_URLS http://+:80

アスタリスクではなくプラス記号に注意してください。リンクが良好である限り、私の答えを読むよりも、上記のdockerhubリンクにアクセスすることを実際にお勧めします。バージョン1.1はもうすぐです。将来、状況は再び変わる可能性があります。

コンテナを実行するときは、環境変数の設定に従って、必ずゲストポート80を公開してください。例えば:

docker run -d -p 8000:80 myapp
curl localhost:8000

1
これは私のユースケースでもあり、リンクは非常に役に立ちました。ありがとうございました。
撞着語

3

AspNetCore 3.1+の場合は、ファイルに次の行を追加するだけですappsettings.json

"Urls": "http://*:80"

1
チャームのように機能します。の解決策がうまくいかない理由がわかりませんhosting.json
マチャド

0

環境変数ASPNETCORE_URLSをに設定しますhttp://0.0.0.0:5000/

Visual Studioから実行している場合は、プロジェクトプロパティの[デバッグ]タブから環境変数を追加します。

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