1. ホーム
  2. c#

[解決済み] kestrel Web サーバーが localhost 以外のリクエストを聞くようにするにはどうすればよいですか?

2023-02-24 10:10:51

質問

私は、c#、asp.net 5、mvc 6 のアプリケーションを Windows 2008 サーバーにデプロイしました。 私は dnx web を起動し、ポート 5000 をリッスンして、ローカル コンピュータからアクセスするときに正常に動作しています。

ローカルホスト以外のリクエストをリッスンするようにするにはどうしたらよいでしょうか。

追伸:この 質問 はこれの複製ではありません...それは、hosting.iniが実際に.iniフォーマットを持っていたRC1以前のasp.netを参照しています。 現在ではJSONで、実際に何が含まれるべきかについてのドキュメントを見つけることができません。

P.P.S. 本当の解決策は、非アクティブな 答え にあるのですが、大量の注意事項があります。 手順です。

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

追伸:この質問をアップブートしてくれた人たちへ。 それは時代遅れです。 非常にひどく時代遅れです!

それは .NET Core の初期のバージョンに適用されました。 質問と回答は、フレームワークの現在のバージョン (例: 2.x, 3.x) には確実に適用されません。

どのように解決するのですか?

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

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

UPDATEしました。 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 がすべてのネットワーク インターフェイスにバインドする原因となります。 IPv6 アドレスでないホスト名は、Kestrel がすべてのネットワーク インターフェースにバインドする原因となります。

この動作は、将来的に変更される可能性があると思います。そのため、私は *:5000 , 0.0.0.0:5000::5000 というフォームで、任意のITアドレスの登録が可能です。

UPDATED 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バインディングの使用例です。

REMARK 環境変数の名前が ASPNETCORE_SERVER.URLS から ASPNETCORE_URLS は、ASP.NETの後のバージョンでは( ここで ASP.NET Core 3.1 のドキュメントを参照してください)。