.NET Core中的IIS服务器可以在多个主机上部署Kestrel服务器吗?

时间:2016-10-05 06:40:41

标签: iis asp.net-core .net-core

我知道,当您发布"到IIS,它作为反向代理,将消息路由到Kestrel服务器,并确保它们保持活跃状态​​。但是,我还没有看到任何定义,所有这些Kestrel服务器都部署在与IIS服务器相同的主机上,或者IIS服务器是否可以在一台主机上,并将Kestrel服务器部署在单独的主机上并拥有自己的服务器IP地址?

如果没有,那么生产中的部署策略是什么?每个VM都需要拥有自己的IIS,部署1-n Kestrels?然后你需要一个单独的例如IIS服务器顶部的F5负载均衡器?

感谢您对此提出的任何意见:)

2 个答案:

答案 0 :(得分:0)

ASP.NET Core middleware for IIS integration期望IIS和应用程序部署在同一台机器上:

public static IWebHostBuilder UseIISIntegration(this IWebHostBuilder app)
{
    ...
    var address = "http://localhost:" + port + path;
    app.UseSetting(WebHostDefaults.ServerUrlsKey, address);
    ...
}

答案 1 :(得分:0)

当然,您可以使用Kestrel自行托管IIS(只需删除UseIISIntegration并监听非环回IP),但它不应该是面向互联网的应用程序(尚未准备好了)。但您必须手动配置IIS以将请求路由/平衡到后面的ips / services。没有"自动服务发现"提供。此外,您还需要自己管理生命周期(即IIS不再停止/重新启动应用程序)。

但是,由于在微服务/可扩展方案中,IP不是固定的,并且可能在服务产生和消失时发生变化,因此当您需要在新服务启动时更改此配置时,IIS会有点棘手并停止

因此,如果你使用微服务,你将不得不使用像Java世界中的ZooKeeper这样的东西(基本上是一个键值存储,每个web服务在那里注册它并且你使用这些值来广播/路由请求或)等等,甚至可能是redis。

也许看看Service Fabric,它也可以在内部使用(类似于this的内容)。