Kestrel:ASP.NET Core的Web服务器

与以前版本的ASP.NET相比,我们在ASP.NET Core中托管应用程序的方式已经发生了翻天覆地的变化。Kestrel是ASP.NET Core项目模板中包含的新的默认Web服务器。

什么是Kestrel?

Kestrel是基于开源的,跨平台的,事件驱动的,基于异步I / O HTTP的服务器。它被开发成可以在任何平台上托管ASP.NET Core应用程序。默认情况下,它包含在ASP.NET Core应用程序中。

它基于libuv

Kestrel是一个开源库,可以在GitHub上找到

为什么使用Kestrel

较旧的ASP.NET应用程序与IIS紧密耦合。IIS是一个完整的Web服务器,具有Web服务器所需的所有功能。现在,它已经成为最好的Web服务器之一,但与此同时同时,它也是最慢的Web服务器之一。现在,新设计的ASP.NET Core应用程序已与IIS完全分离。 这种脱钩使ASP.NET Core可以在任何平台上运行,从而使其真正跨平台。但是,它仍然需要具有聆听 HTTP请求并将响应发送回客户端的能力。所以就诞生了Kestrel。

Kestrel在ASP.NET Core应用程序中以进程方式运行。 因此,它独立于其所处的环境运行。Kestrel Web服务器位于名称空间Microsoft.AspNetCore.Server.Kestrel中。Main方法调用CreateDefaultBuilder,后者负责创建Web应用程序主机。CreateDefaultBuilder调用UseKestrel方法将Kestrel注册为将用于承载我们的应用程序的服务器

我们可以通过两种方式使用Kestel

  1. 自托管
  2. 在另一个Web服务器之后运行

自托管

在Sef Hosting模型下,ASP.NET Core应用程序直接侦听 HTTP 来自互联网的请求,如下图所示。

该图显示了如何使用Kestrel Web服务器自托管ASP.NET Core应用程序。如何使用dotnet run cli命令来启动Kestrel Web服务器。要运行所有我们需要做的就是进入项目文件夹,在其中找到.csproj文件,然后运行以下命令

dotnet run

Kestrel启动并侦听端口5000/5001。

 

另一种方法是转到已发布的文件夹并运行以下命令,这也将启动kestrel服务器。

dotnet helloWorld.dll

在另一个Web服务器之后运行

Kestrel不是功能齐全的Web服务器。 但这就是使它快速的原因。建议不要在生产环境中将Kestrel作为独立的Web服务器运行。 建议在IIS,Nginx,Apache等功能齐全的Web服务器之后运行它。在这种情况下,Web服务器充当反向代理服务器。反向代理服务器从Internet获取HTTP请求,并将其以接收方式直接传递给Kestrel服务器。

IIS可以在将请求传递给Kestrel之前接受HTTP请求并执行一些有用的处理,例如日志记录,请求过滤,URL重写。下图显示了其实现方式

Kestrel Web服务器在另一个Web服务器(如IIS,NGINX,Apache等)后面运行

在生产中应使用此模型的原因有很多

  • 安全:它提供了可选的附加层配置和防御。简化负载平衡
  • SSL设置:仅我们的反向代理服务器需要SSL证书,并且该服务器可以使用纯HTTP与内部网络上的应用程序服务器进行通信。
  • 与多个地址共享单个IP
  • 请求筛选,日志记录和URL重写等
  • 如果崩溃,它可以确保应用程序重新启动

CreateDefaultBuilder方法调用UseIISIntegration,它告诉ASP.NET应用程序将使用IIS作为Kestrel前面的反向代理。

Kestrel Web服务器的好处

  1. Kestrel快。 它不能提供标准Web服务器所期望的许多功能。 因此,它使设计轻巧,快速。
  2. 支持.NET Core的所有版本
  3. 它是跨平台的。 我们可以在Windows / Linux或Mac上运行它。
  4. 配置和运行非常简单。 实际上,当我们在Visual Studio中创建新的ASP.NET Core项目时,它已经配置好了
  5. 支持HTTPS
  6. 支持HTTP / 2(在macOS†上除外)
posted @ 2020-10-25 20:02  N-COUNT  阅读(769)  评论(0编辑  收藏  举报