2017-02-25 5 views
0

私はUbuntu 16.04を使用していますが、私はVMで実行しているKestrelサーバーを持っています。
リバースプロキシとしてnginxを使用して、全体のトラフィックがリダイレクトされます。私はこの方法を使用してアクションに完全なURLを取得しようとすると.NETコアの絶対リンクがlocalhostを指しています

var host = new WebHostBuilder() 
      .UseKestrel() 
      .UseUrls("http://*:5000") 
      .UseContentRoot(Directory.GetCurrentDirectory()) 
      .UseIISIntegration() 
      .UseStartup<Startup>() 
      .Build(); 

     host.Run(); 

私のウェブホストは、このようになります

Url.Action("Index", "User", null, HttpContext.Request.Scheme); 

それはなく、localhostのドメインのアドレスを返します。

ので、代わりの:

hxxp:私は

hxxpを取得しています

//domain.com/user:// localhostを:5000 /ユーザー

これはアプリケーションまたはnginxの設定に関係していますか?

答えて

0

この設定では、元のドメイン名がKestrelサーバーに到達しないため、ASP.NET MVCはそれを認識しません。代わりにnginxが逆プロキシとして機能するときにlocalhost:5000へのリクエストを行います。そのため、アプリケーションから絶対URLを生成しようとすると、クライアントからの元のURLの代わりにこれを使用します。

オリジナルのURLをいくつかのカスタムヘッダーとして送信するようにnginxを設定することもできますが、このヘルパーを読み込んで適切なURLを生成するカスタムURLヘルパーを使用する必要があります。この理由から、あなたのASP.NET MVCアプリケーションの相対URLのみを使用することをお勧めします:

Url.Action("Index", "User") 
+0

FastCGIプロトコルにはこのための特別なヘッダーがあり、URLを生成する際にはPythonフレームワークフラスコに考慮されています。ここに似たものがありますか? –

+0

私は、URLヘルパーによって自動的に考慮されるようなヘッダーは認識していません。 –

+0

問題は、たとえば招待状リンクを含むメールを送信したいときです。これは完全なURLでなければなりません。これに関するヒント? –

関連する問題