【问题标题】:Configure IIS as a load balancer for two kestrel servers (for the same website)将 IIS 配置为两个 kestrel 服务器的负载平衡器(对于同一网站)
【发布时间】:2017-01-25 07:47:28
【问题描述】:

ASP.NET Core 不能直接在 IIS 中运行,因为它需要 Kestrel。

这意味着无法像在传统 ASP.NET 网站中那样在运行时更新网站,因为在更新期间必须关闭 kestrel 服务器。

我想在不添加额外 Web 服务器和负载平衡器的情况下避免停机。是否可以在 IIS 中配置 ASP.NET Core 模块以连接到两个不同的 Kestrel 服务器?那么如果其中一个被关闭,所有请求都会转到另一个?

(我想在磁盘上有两个不同的文件夹:C:\inetpub\wwwroot\mysite_instance1C:\inetpub\wwwroot\mysite_instance2,因此关闭一个将启用该实例的更新)

如果可能,我们需要注意哪些事项?例如,是否需要以某种方式配置防伪令牌? (我不使用会话。)

【问题讨论】:

  • AspNetCoreModule 必须更新以支持此功能,或者您可以编写自己的 IIS 模块来执行此操作,目前不支持此功能。我将把它作为一个问题记录在github.com/aspnet/AspNetCoreModule

标签: c# asp.net iis asp.net-core kestrel-http-server


【解决方案1】:

我也对简洁的负载平衡器机制感兴趣,但不知道有什么方法可以做到。然而,您可以完美地将 Web 应用程序的目标目录从目录 C:\inetpub\wwwroot\mysite_instance1 切换到目录 C:\inetpub\wwwroot\mysite_instance2,更新 instance1 并将其切换回来,它应该可以完成这项工作。

【讨论】:

  • 应用程序池重新启动,在繁忙的服务器上必须等待连接关闭,您可能会坐在那里很长时间而其他人无法访问该网站。
【解决方案2】:

由于 IIS 和 AspNetCoreModule 的工作方式,目前不支持此功能。

IIS 将 IHttpContext 对象传递给 AspNetCoreModule。 AspNetCoreModule 使用 IHttpContext 对象来查询物理应用程序路径。然后模块读取应用程序目录中的 web.config 文件。完成此操作后,模块将在 IIS 应用程序和 dotnet 进程之间保持 1:1 的关系。

我已经 raised this as a question 并代表您提供了一些其他详细信息。

【讨论】:

    猜你喜欢
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    相关资源
    最近更新 更多