web-dev-qa-db-ja.com

同じURLで複数の.NET Coreアプリをホストする方法

Asp.netコアでいくつかのWebサイトを構築しています(複数のユーザーインターフェイスアプリケーションとWeb APIアプリ)。それらはすべてWeb APIを利用して連携します。私の質問では、App1、App2、App3と呼びます。 IISでWebサイトをホストしています。

通常、古い.net Framework(4.5.1)では、IISに1つのWebサイトがあり、複数のWebアプリで複数のアプリケーションをホストしていました。そのようです:

  • WebSite1-ポート443で実行

    • アプリ1

    • アプリ2

    • アプリ3

Webサイト(WebSite1)が(SSL証明書を使用して)ポート443で実行されている場合、次のように1つのドメインURLを介してすべてのアプリにアクセスできます。

URLの最後に異なるアプリ名を付けて、それらを識別します。

新しいasp.NET Coreアプリケーションをホストする場合、IISでもホストします。また、asp.NET Core Webサイトの展開に関するドキュメントに従って、異なる.NET Core WebアプリをホストしますIIS内のサイト。

https://www.example.com のように、すべてのサイトに1つのドメイン名があるため(SSL証明書を使用しています)、他のWebサイトに異なるポートを指定する必要があります。だから私はこのようなものになってしまいます:

  • WebSite1-ポート443で実行

  • WebSite2-ポート444で実行

  • WebSite3-ポート445で実行

これらのアプリはすべて、次のドメイン名のURLを介してアクセスできます。

Asp.NET Coreアプリケーションをすべて1つのWebサイトの下で異なる "アプリケーション"としてホストするにはどうすればよいですか。つまり、同じドメイン名のURL( https://www.example.com およびフォワードスラッシュアプ​​リに解決されます)名前は、必要なアプリを識別します)? ORまたは、ポートで構成したものをすべてルーティングして、App1がexample.com/のデフォルト、App 2がexample.com/app2/、App 3はexample.com/app3/?

この.NET Core展開を完全に間違った方法で見ていますか?

ポインタを事前にありがとう!

10
Rob McCabe

同じドメインで複数のASP Net Coreアプリケーションを提供するためにリバースプロキシを使用できます。
IISの使用はよくわかりませんが、URL書き換えをインストールしてから のドキュメントに従ってください Microsoftから提供されました(これも これ が参考になります)。
nginx を使用することもできます location および proxy_pass 次のように:

...
Some nginx Configuration 
location /App1 {
        proxy_pass http://127.0.0.1:443;
    }
location /App2 {
        proxy_pass http://127.0.0.1:444;
    }
location /App3 {
        proxy_pass http://127.0.0.1:445;
    }
Other configurations...

その後、別のASP Netアプリケーションをドメインに追加するたびに、別の場所を追加し、別のポイントでアプリケーションを実行してnginxを再起動する必要があります。

5
Tinwor

アプリごとにサイトを作成する必要はありません。1つのサイト内のWebアプリケーションとして、以前と同様にホストできます。必要なのは、.Net Coreアプリケーション用に管理されていないアプリプールを選択することだけです。したがって、これは機能します: https:// domain/app1 および https:// domain/app2 で、Webサーバーに必要な証明書は1つだけです

または、アプリごとにサイトを作成してから、アプリごとに https://app1.domain のようなサブドメインが必要です https://app2.domain この場合、すべてのサブドメインは同じIPを指す必要があり(サーバーにIPが1つしかない場合)、そのサイトへの各サイト\アプリのバインディングを設定する必要があります。すべてのサイトを同じポート(443または80)にバインドする必要があります。

IIS 7の場合、複数サイト構成でのSSLの場合、ワイルドカード証明書が必要です。IIS 8以上では、サーバー名表示機能を使用でき、サイトごとに個別の証明書がありますが、SNIは新しいため、一部のブラウザーでサポートされていない可能性があるため、ワイルドカード証明書も使用することをお勧めします

どちらの場合も、ここからWindowsサーバーホスティングをセットアップする必要があります Microsoftのダウンロードセンター

2
Vitaly

試してください:Web.configファイルで、各アプリケーションに異なる名前を付けます:<add name="herenewappname" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />

1
Q U A N G

ここでサブアプリケーションのアドバイスを使用してこれを機能させました: https://docs.Microsoft.com/en-us/aspnet/core/Host-and-deploy/iis/?view=aspnetcore-2.2#サブアプリケーション

リンクが切れた場合の重要な部分は次のとおりです。

ASP.NET Coreアプリを別のASP.NET Coreアプリの下のサブアプリとしてホストするには:

1.サブアプリのアプリプールを確立します。 .NET Coreのコア共通言語ランタイム(CoreCLR)が起動され、デスクトップCLR(.NET CLR)ではなくワーカープロセスでアプリをホストするため、.NET CLRバージョンをマネージコードなしに設定します。

2. IIS Managerにルートサイトを追加し、ルートサイトの下のフォルダにサブアプリを配置します。

3。IIS Managerのサブアプリフォルダーを右クリックし、[アプリケーションに変換]を選択します。

4. [アプリケーションの追加]ダイアログで、アプリケーションプールの[選択]ボタンを使用して、サブアプリ用に作成したアプリプールを割り当てます。 OKを選択します。

ボーナスとして、私のメインアプリケーションはレガシーWebフォームであり、私のサブアプリケーションはエキサイティングな新しい.NET Core機能です。

幸せな日々。

1
Resource

IISの場合、アプリケーション要求ルーティング( [〜#〜] arr [〜#〜] )を RL rewrite モジュールと組み合わせて使用​​して、リクエストを次の関連付けにルーティングできます。 URLポート。 Nginxのような同様のプロキシを構築し、URLの各パターンに従って適切なポートを指すために使用されます。以下のARRのサンプルを確認できます。

https://www.iis.net/learn/extensions/url-rewrite-module/reverse-proxy-with-url-rewrite-v2-and-application-request-routing

1
Toan Vo