如何在同一个URL下托管多个.NET Core应用程序

Rob*_*abe 10 c# asp.net deployment iis asp.net-core

我正在asp.net核心构建一些网站(多个用户界面应用程序和一个web api应用程序).他们都使用web api一起工作.出于我的问题的目的,我们将其称为App1,App2和App3.我在IIS中托管我的网站.

通常,在旧的.net Framework(4.5.1)中,我在IIS中有一个网站,有多个Web应用程序来托管我的多个应用程序.像这样:

  • WebSite1 - 在端口443上运行

    • APP1

    • 应用2

    • APP3

如果网站(WebSite1)在端口443(使用SSL证书)上运行,则意味着可以通过一个域URL访问所有应用程序,如下所示:

在网址末尾使用不同的应用名称来识别它们.

托管新的asp.NET Core应用程序时,我也在IIS中托管,并按照asp.NET Core网站部署的文档,将每个.NET Core Web应用程序托管在IIS中的不同站点中.

由于我的所有网站都有一个域名,例如https://www.example.com(我使用的是SSL证书),我必须为其他网站提供不同的端口.所以我最终得到这样的东西:

  • WebSite1 - 在端口443上运行

  • WebSite2 - 在端口444上运行

  • WebSite3 - 在端口445上运行

然后,可以通过以下域名网址访问所有这些应用:

如何在一个网站下托管asp.NET Core应用程序作为不同的"应用程序",这意味着它们解析为相同的域名URL(https://www.example.com和正斜杠应用程序名称标识我们想要的应用程序) ?或者,如何将我现在配置的端口与端口一起路由并将它们全部路由,以便App1默认为example.com/,App 2是example.com/app2/,App 3是example.com/app3/?

我是否完全以错误的方式看待这个.NET Core部署?

提前感谢任何指针!

Tin*_*wor 10

您可以使用反向代理为同一域上的多个 ASP Net Core 应用程序提供服务。
使用 IIS 我不太确定,但您需要安装 URL Rewrite,然后按照Microsoft 提供的文档进行操作(也应该会有所帮助)。
您还可以使用locationproxy_pass使用nginx,如下所示:

...
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...
Run Code Online (Sandbox Code Playgroud)

然后,每次您想向域中添加另一个 ASP Net 应用程序时,您都需要添加另一个位置,在不同的点上运行该应用程序并重新启动 nginx。

  • 我的 Ubuntu 服务器上有多个应用程序,并且我使用与您描述的 Nginx 相同的方法。但我无法解决应用程序路由问题:当我向 /App1 发出请求时,此路径似乎正在由该位置后面的应用程序处理(例如 http://127.0.0.1:443/App1)。但是由于应用程序中没有这样的路由,它会失败并显示错误 404。这个问题有解决方案吗? (2认同)

Res*_*rce 6

我使用这里的子应用程序建议得到了这个工作:https : //docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/?view= aspnetcore-2.2#sub-applications 。

这是重要的部分,以防链接失效:

要将 ASP.NET Core 应用作为另一个 ASP.NET Core 应用下的子应用托管:

1.为子应用建立应用池。将 .NET CLR 版本设置为无托管代码,因为 .NET Core 的核心公共语言运行时 (CoreCLR) 被启动以在工作进程中托管应用程序,而不是桌面 CLR (.NET CLR)。

2.在IIS管理器中添加根站点,在根站点下的文件夹中添加子应用程序。

3.右键单击IIS管理器中的子应用程序文件夹并选择转换为应用程序。

4.在“添加应用程序”对话框中,使用“应用程序池”的“选择”按钮分配您为子应用程序创建的应用程序池。选择确定。

作为奖励,我的主要应用程序是旧版 Web 窗体,而我的子应用程序是令人兴奋的新 .NET Core 功能。