《ASP.NET Core基本原理》该系列是纯粹翻译至微软官网,为本人学习所用。也是ASP.NET Core系列最后一篇翻译类文章。微软如需了解更详细信息请直接移步至微软官网。

ASP.NET Core应用程序与进程内HTTP服务器实现一起运行。服务器实现监听HTTP请求,并将它们作为Request Features组合成一个HttpContext集合。

ASP.NET Core提供两种服务实现:

  • Kestrel 是一个基于libuv(一个跨平台的异步I/O库)的跨平台的HTTP服务器。
  • WebListener 是一个基于Http.Sys kernel driver的仅支持Windows的HTTP服务器。

何时使用Kestrel与反向代理

Kestrel是默认包含在ASP.NET Core新项目模板中的Web服务器。如果你需要将你的应用程序暴露在网络中,我们建议你使用IIS, Nginx, 或者 Apache作为一个反向代理服务器。反向代理服务器从网络上接受HTTP请求,并在一些初步处理之后将它们转发到Kestrel,如下图所示。

使用反向代理最重要的原因是安全性。Kestrel相对来说是比较新的,还不能完全应对防御攻击。

另一个需要使用反向代理的场景是当你的多个应用程序在同一台服务器上共享相同的端口时。直接使用Kestrel是不会工作的,因为Kestrel不支持在多个进程间共享一个端口。当你配置Kestrel来监听一个端口时,它会处理所有的该端口的所有流量,不考虑具体的主机头。可以共享端口的反向代理必须在唯一的端口上转发给Kestrel。

即使不需要反向代理服务器,使用它可以简化负载均衡和SSL设置。只有你的反向代理需要SSL证书,并且该服务器可以使用纯HTTP与内部网络上的应用程序服务器进行通信。

  • IIS with Kestrel

当你使用IIS作为ASP.NET Core反向代理时,ASP.NET Core应用程序运行中与IIS工作进程相分离的进程中。在IIS进程中,会运行一个特殊的IIS模块来协调反向代理关系。这个模块叫做ASP.NET Core Module。ASP.NET核心模块主要功能是启动ASP.NET Core应用程序,当崩溃时重启它,并将HTTP流量转发给它。

  • Nginx with Kestrel

(见官网)。

  • Apache with Kestrel

(见官网)。

原文链接

Managing Application State

个人博客

我的个人博客