gpt4 book ai didi

asp.net - 如何在同一服务器上托管 Web 应用程序和 API,同时将它们分开?

转载 作者:行者123 更新时间:2023-12-02 18:11:30 25 4
gpt4 key购买 nike

假设我们有 2 个独立的应用程序,一个 Web Api 应用程序和一个 MVC 应用程序,都是用 .NET 4.5 编写的。如果您要在 IIS 中的主机 header “https://www.mymvcapp.com/”下托管 MVC 应用程序,是否可以在 IIS 中的主机 header “https://www.mymvcapp.com/api/”下单独托管 Web Api 应用程序?

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

此外,如果两个应用程序(一个 API 和一个 Web 应用程序)位于单独的服务器上,我将如何托管两个应用程序,以便我可以从 http://www.mymvcapp.com/api 提供 api?

最佳答案

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

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

运行 IIS 的单个 Web 服务器

在 IIS 中有两种方法可以实现此目的:

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

c:\sites\mymvcapp
c:\sites\mymvcapp\api

您可以执行以下操作:

创建子应用程序

创建子应用程序将允许从 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 中(最佳实践是创建一个 sites-enabled conf,它是 sites-available 的符号链接(symbolic link),并且您可以在部署时销毁该符号链接(symbolic link))执行以下操作:

location / {
proxy_pass http://mymvcapp.com:80
}
location /api {
proxy_pass http://mymvcapp.com:81
}

然后设置正确的 IIS 设置,让每个站点监听端口 80 (mymvcapp) 和端口 81 (api)。

HAProxy

acl acl_WEB hdr_beg(host) -i mymvcapp.com
acl acl_API path_beg -i /api

use_backend API if acl_API
use_backend WEB if acl_WEB

backend API
server web mymvcapp.com:81

backend WEB
server web mymvcapp.com:80
<小时/>

*我从内存中发出 Junction 命令;我几个月前这样做过,但最近没有这样做,所以如果命令有问题请告诉我

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

关于asp.net - 如何在同一服务器上托管 Web 应用程序和 API,同时将它们分开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24640193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com