我正在asp.net核心构建一些网站(多个用户界面应用程序和一个web api应用程序)。他们都使用web api一起工作。出于我的问题的目的,我们将其称为App1,App2和App3。我在IIS中托管我的网站。
通常,在旧的.net Framework(4.5.1)中,我会在IIS中拥有一个网站,其中有多个Web应用程序来托管我的多个应用程序。像这样:
WebSite1 - 在端口443上运行
App1的
App2的
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部署?
提前感谢任何指针!
答案 0 :(得分:2)
您不需要为每个应用创建一个网站,您可以像以前一样托管它,作为一个网站内的网络应用程序。您唯一需要做的就是为您的.Net Core应用程序选择非托管应用程序池。这样可行: https://domain/app1和https://domain/app2,您只需要1个Web服务器证书
或者,您可以为每个应用创建网站,然后您需要为每个应用创建一个子域,例如https://app1.domain和https://app2.domain 在这种情况下,所有子域必须指向相同的IP(如果您的服务器只有一个),并且您需要为每个site \ app设置绑定到它的域。您应该将所有站点绑定到同一个端口(443或80)。
对于多站点配置中的SSL,如果您有IIS 7,则需要具有通配符证书。在IIS 8及更高版本中,您可以使用服务器名称指示功能并为每个站点分别使用证书,但我建议您使用通配符证书,因为SNI是新的,某些浏览器可能不支持
在这两种情况下,您都需要从此处Microsoft's download center
设置Windows Server Hosting答案 1 :(得分:1)
您可以使用反向代理在同一域上提供多个ASP Net Core应用程序
使用IIS我不太确定,但您需要安装URL Rewrite,然后按照Microsoft提供的documentation(this one也应该提供帮助)。
您还可以使用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。
答案 2 :(得分:1)
对于IIS,您可以使用与ARR模块组合的应用程序请求路由(URL rewrite)将路由请求分配到URL端口之间的每个关联。 它用于构建类似Nginx的代理,并指向URL的每个模式后面的适当端口。 您可以在下面看到带有ARR的示例:
答案 3 :(得分:1)
试一试:在文件Web.config中,每个应用程序都有一个不同的名称:<add name="herenewappname" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
答案 4 :(得分:1)
我是根据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版本设置为“无托管代码”,因为针对的核心公共语言运行时(CoreCLR) 引导.NET Core来承载工作进程中的应用程序,而不是 桌面CLR(.NET CLR)。
2。在IIS管理器中添加根站点,并将子应用程序添加到根站点下的文件夹中。
3。右键单击IIS管理器中的子应用程序文件夹,然后选择“转换为应用程序”。
4。在“添加应用程序”对话框中,使用“应用程序池”的“选择”按钮分配为该应用程序池创建的应用程序池。 子应用选择确定。
作为奖励,我的主应用程序是旧版Web窗体,而子应用程序是令人兴奋的.NET Core新功能。
快乐的日子。
答案 5 :(得分:1)
假设您的主Web目录是:
mainweb\
确保您的App1子文件夹中运行了有效的ASP.NET应用程序:
mainweb\App1\
现在将您的dotnet core 2或3应用程序以及所有相关性等安装在App1 \文件夹中。
下一步,将此web.config放在同一文件夹中:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath=".\App1.exe" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="outofprocess" />
</system.webServer>
</location>
</configuration>
现在假设您还希望在mainweb下运行另一个名为App2 \的dotnet核心Web api:
当mainweb ASP.NET应用程序启动时,它还将同时启动dotnet核心应用程序。 一切都很好,它们在您的主网下运行:
https://mainweb.com/App1/WeatherForecast/ // WeatherForecast is controller name
https://mainweb.com/App2/<ApiControllerName>/