Asp.net 如何从同一台服务器托管web应用程序和API,同时将它们分开存放?

Asp.net 如何从同一台服务器托管web应用程序和API,同时将它们分开存放?,asp.net,asp.net-mvc,iis,asp.net-web-api,Asp.net,Asp.net Mvc,Iis,Asp.net Web Api,假设我们有两个独立的应用程序,一个Web Api应用程序和一个MVC应用程序,都是用.NET 4.5编写的。如果要在IIS中主机头“”下托管MVC应用程序,是否可以在IIS中主机头“”下单独托管Web Api应用程序 在IIS中运行这两个应用程序的进程需要分开。我知道托管、自托管和使用IIS托管的不同方法。如果可能的话,我想使用IIS 另外,如果两个应用程序(一个API和一个web应用程序)都位于一个单独的服务器上,那么我将如何承载这两个应用程序(一个API和一个web应用程序),以便从http

假设我们有两个独立的应用程序,一个Web Api应用程序和一个MVC应用程序,都是用.NET 4.5编写的。如果要在IIS中主机头“”下托管MVC应用程序,是否可以在IIS中主机头“”下单独托管Web Api应用程序

在IIS中运行这两个应用程序的进程需要分开。我知道托管、自托管和使用IIS托管的不同方法。如果可能的话,我想使用IIS


另外,如果两个应用程序(一个API和一个web应用程序)都位于一个单独的服务器上,那么我将如何承载这两个应用程序(一个API和一个web应用程序),以便从
http://www.mymvcapp.com/api

至少有4种方法可以做你想做的事情。如果您有一台web服务器,并且两个应用程序都由运行IIS的web服务器提供服务,则前两种方法适用于。如果在负载平衡器后面运行多个web服务器,只要API和网站在同一台服务器上运行,此方法也可以使用

第二种方法是使用所谓的“反向代理”,本质上是一种将流量从一台服务器(代理服务器)路由到多台内部服务器的方法,具体取决于您接收的流量类型。这适用于在一组服务器上运行web服务器和在另一组服务器上运行API的情况。你可以使用任何你想要的反向代理软件,我提到nginx和HAProxy是因为我在过去都使用过

运行IIS的单一Web服务器 有两种方法可以在IIS中执行此操作:

如果您的物理文件夹结构如下所示:

c:\sites\mymvcapp
c:\sites\mymvcapp\api
您可以执行以下操作:

location / {
    proxy_pass http://mymvcapp.com:80
}
location /api {
    proxy_pass http://mymvcapp.com:81
}
创建子应用程序 创建子应用程序将允许从
www.mymvcapp.com/API
访问您的“API”站点,而无需任何路由更改

为此:

  • 打开IIS管理器
  • 单击左侧“站点”文件夹树中的相应站点
  • 右键单击
    API
    文件夹
  • 单击“转换为应用程序”
缺点是,所有子应用程序都继承其父应用程序的web配置,如果您在其中有冲突的设置,您将看到一些运行时的奇怪之处(如果它能工作的话)

创建目录连接 第二种方法是这样做的,使应用程序保持其独立性;同样,你不必做任何路由

假设有两种文件夹结构:

c:\sites\api
c:\sites\mvcapp
您可以在Windows中设置交叉点。从命令行*:

cd c:\sites
mklink /D /J mymvcapp c:\sites\mvcapp
cd mymvcapp
mklink /D /J api c:\sites\api
然后进入IIS管理器,并将两者转换为应用程序。通过这种方式,
API
将在
\API\
中可用,但不会实际与父级共享其web.config设置

多服务器 如果您使用nginx或haproxy作为反向代理,您可以根据需要将其设置为将呼叫路由到每个应用程序

nginx反向代理设置 在nginx.conf中(最佳做法是创建一个启用了
站点的
conf,它是指向可用
站点的符号链接,您可以在部署时销毁该符号链接),执行以下操作:

location / {
    proxy_pass http://mymvcapp.com:80
}
location /api {
    proxy_pass http://mymvcapp.com:81
}
然后设置正确的IIS设置,让每个站点在端口80(mymvcapp)和端口81(api)上侦听

单性
*我从内存发出连接命令;我是几个月前做的,但不是最近,所以如果命令有问题,请告诉我


NB:配置文件并不意味着是完整的配置文件——只是显示反向代理所需的设置。根据您的环境,您可能需要设置其他设置。

是否可以使用您提到的任何方法在单独的服务器上托管应用程序?@bosts Yes。在这种情况下,您需要提供代理服务器的IP/主机名。例如,
proxy\u passhttp://anotherlocalserver.com:81
代理通行证http://172.168.0.2:81
,这将是该独立服务器的IP地址。