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
- 自托管
- 在另一个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服务器的好处
- Kestrel快。 它不能提供标准Web服务器所期望的许多功能。 因此,它使设计轻巧,快速。
- 支持.NET Core的所有版本
- 它是跨平台的。 我们可以在Windows / Linux或Mac上运行它。
- 配置和运行非常简单。 实际上,当我们在Visual Studio中创建新的ASP.NET Core项目时,它已经配置好了
- 支持HTTPS
- 支持HTTP / 2(在macOS†上除外)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步