为什么 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 还在发展,后续肯定会越来越强大的。

本文分享自微信公众号 - 一线码农聊技术(dotnetfly)。
如有侵权,请联系 [email protected] 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章