为什么 Linux 上的 Asp.NET 5 需要 Kestrel ?

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么 Linux 上的 Asp.NET 5 需要 Kestrel ?相关的知识,希望对你有一定的参考价值。

咨询区

  • Freeman Helmuth

当我在 Linux 上部署 ASP.NET 5 时,我试着了解整个 Web应用程序框架,所有的文档我都看过,包括这篇 http://docs.asp.net/en/latest/conceptual-overview/aspnet.html#servers  都没有找到我想要的答案。

为什么 Asp.NET 5 不能弃用 Kestrel 直接和 nginx 集成?我一直都没有明白,而且我也在深度思考为什么一定是下面这样?


.NET Core(or mono) --> Kestrel --> Nginx

而且我发现 momo 上的 Asp.NET 和 Asp.NET MVC 已经直接支持 nginx 上的 fastcgi 了。https://www.mono-project.com/docs/web/fastcgi/nginx/

Kestrel 和 nginx 不都是一样的 httpserver,只不过前者少了一些功能罢了。

回答区

  • agua from mars

ASP.NET Core 并不需要 Kestrel。

你说的是对的,Kestrel 仅仅是一个实现了一些简单功能的 Http Server, 你可以在 Linux 或者 Mac 上无需开启 Kestrel 的情况下跑 Asp.NET Core,但前提是你必须要有一个 Http Server 或者 fastCGI server。

Nginx 通常用于给静态资源做反向代理,同时也可以给动态内容做 gzip压缩, 这一块上 Kestrel 并没有这些特性,当然你也可以写一个实现特定 Http 功能的 HttpServer。

  • agua from mars

真的,实际部署上你必须要 Kestrel,正如 Agua 所说,理论上:你可以将 Asp.NET Core 跑在 Kestrel 之外的 Http server 上,但前提是这些httpserver要支持 netcore。

然而到目前为止,也只有 Kestrel 这么唯一一个支持跑 netcore 的HttpServer,换句话说,目前还不存在用 .NET Core 写的 FastCGI-Server 库。

所以说,要想将 .NET Core 和 nginx,apache集成,你所能做的就是将它们的请求代理到 Kestrel 上。

点评区

Linux 和 Mac 平台上不清楚,在 windows 平台上可以弃用 Kestrel,将 Http.sys 直接集成到 Asp.NET Core,这是一点问题都没有的, .net core 还在发展,后续肯定会越来越强大的。

以上是关于为什么 Linux 上的 Asp.NET 5 需要 Kestrel ?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Azure Web 角色上的 IIS 需要如此频繁地重新编译 ASP.NET 应用程序?

Linux平台部署ASP.NETASP.NET COREPHP

在 asp.net 5/vnext 上的磁盘上没有 dll 的代码合同

ASP.NET Core在CentOS上的最小化部署实践

带有负载均衡器的 AWS Elastic Beanstalk Linux 托管实例上的 ASP.NET Core 3.1 - HTTPS

CultureInfo:海地克里奥尔语和 ASP.NET/MVC 上的 .NET 3.5?