ASP.NET Core服务器综述
ASP.NET Core應用通過一個進程內的HTTP服務器實例實現運行,這個服務器實例偵聽HTTP請求并將請求作為組成HttpContext的一組請求功能集暴露給我們的應用程序。
ASP.NET Core搭載兩個服務器實現:
Kestrel是一個基于libuv的跨平臺HTTP服務器,libuv是一個跨平臺的異步I/O庫
WebListener是一個基于HTTP.SYS內核驅動的“Windows專用”HTTP服務器
Kestrel
Kestrel是包含在ASP.NET Core新項目模板中默認的web服務器。如果你的應用只接收來自內部網絡的請求,你可以只使用Kestrel本身。
frameborder="0" scrolling="no" style="border-width: initial; border-style: none; width: 965px; height: 173px;">
如果你將你的應用部署在公共網絡上,我們建議你使用IIS,Nginx或者Apache作為反向代理服務器。一個反向代理服務器接收來自網絡的HTTP請求并且在經過一些初步處理后將請求傳遞到Kestrel服務器。過程如下圖所示。
frameborder="0" scrolling="no" style="border-width: initial; border-style: none; width: 658px; height: 167px;">
對edge deployments(從公共網絡上接觸到流量的部署方式)使用反向代理最重要的一個原因就是安全性。因為Kestrel相對較新,對抵御安全攻擊至今還沒有一個完整的功能補充。安全性處理包括但不限于適當的超時,大小的限制,以及并發連接限制等問題。有關何時使用Kestrel與反向代理的更多信息,請參見Kestrel。
IIS with Kestrel
當你使用IIS或者IIS Express作為對ASP.NET Core的反向代理時,ASP.NET Core應用將運行在由該IIS工作進程分離出的一個進程中。在該IIS進程中,存在著一個特殊的IIS模塊,它被用來協調反向代理的關系。它就是ASP.NET Core模塊。ASP.NET Core模塊的主要功能包括啟動ASP.NET Core應用,當應用崩潰時處理重啟,向應用傳送HTTP流量。更多的信息,請參考ASP.NET Core Module。
Nginx with Kestrel
有關如何在Linux使用Nginx作為對Kestrel的反向代理服務器的更多信息,請參考Publish to a Linux Production Environment。
Apache with Kestrel
有關如何在Linux使用Apache作為對Kestrel的反向代理服務器的更多信息,請參考Using Apache Web Server as a reverse proxy。
Jexus with Kestrel
有關如何在Linux使用Jexus作為對Kestrel的轉發服務器的更多信息,請參考?Jexus 5.8.2 正式發布為Asp.Net Core進入生產環境提供平臺支持
WebListener
如果你在Windows上運行你的ASP.NET Core應用,你可以會遇到以下場景——你既想要在公共網絡上部署你的應用,又不能使用IIS,這時,WebListener會是一個可供替代的選擇。
frameborder="0" scrolling="no" style="border-width: initial; border-style: none; width: 658px; height: 167px;">
當你只想要在內網中部署你的應用時,WebListener可以被用來代替Kestrel,特別是當你需要Weblistener服務器支持功能中的某項而Kestrel恰好不支持的時候。
frameborder="0" scrolling="no" style="border-width: initial; border-style: none; width: 658px; height: 167px;">
對于內部網絡場景,為了能達到最好的性能表現,我們通常推薦Kestrel服務器,但是在另一些場景中,你可以想要使用某項僅WebListener支持的功能。關于WebListener功能的更多信息,請參考WebListener。
ASP.NET Core 服務器基礎組件說明
IApplicationBuilder在Startup類中的Configure方法暴露了IFeatureCollection類的ServerFeatures屬性。Kestrel和WebListener服務器都只提供了一個單一的功能,IServerAddressesFeature,但是不同的服務器實現可能會顯示額外的功能。
IServerAddressesFeature可以用來找出哪些服務器實例端口在運行時被綁定。
ServerFeatures?的注釋為“Gets the set of HTTP features the application's server providers”。
自定義服務器
你可以創建自定義服務器實現以用來替代Kestrel或者WebListener。Open Web Interface for .NET(OWIN) guide?說明了怎么去實現一個Nowin-based?IServer。你可以自由地實現你的應用所需的功能接口,但至少必須支持IHttpRequestFeature和IHttpRequestFeature接口。
原文地址:http://www.cnblogs.com/Wddpct/p/6123644.html
.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的ASP.NET Core服务器综述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET Core WebList
- 下一篇: Docker 部署dotnetcore