ASP.NET Core服務器綜述


原文地址:Servers overview for ASP.NET Core

By Tom Dykstra, Steve Smith, Stephen Halter, and Chris Ross

ASP.NET Core應用通過一個進程內的HTTP服務器實例實現運行,這個服務器實例偵聽HTTP請求並將請求作為組成HttpContext的一組請求功能集暴露給我們的應用程序。

ASP.NET Core搭載兩個服務器實現:

Kestrel

Kestrel是包含在ASP.NET Core新項目模板中默認的web服務器。如果你的應用只接收來自內部網絡的請求,你可以只使用Kestrel本身。

如果你將你的應用部署在公共網絡上,我們建議你使用IIS,Nginx或者Apache作為反向代理服務器。一個反向代理服務器接收來自網絡的HTTP請求並且在經過一些初步處理后將請求傳遞到Kestrel服務器。過程如下圖所示。

對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

WebListener

如果你在Windows上運行你的ASP.NET Core應用,你可以會遇到以下場景——你既想要在公共網絡上部署你的應用,又不能使用IIS,這時,WebListener會是一個可供替代的選擇。

當你只想要在內網中部署你的應用時,WebListener可以被用來代替Kestrel,特別是當你需要Weblistener服務器支持功能中的某項而Kestrel恰好不支持的時候。

對於內部網絡場景,為了能達到最好的性能表現,我們通常推薦Kestrel服務器,但是在另一些場景中,你可以想要使用某項僅WebListener支持的功能。關於WebListener功能的更多信息,請參考WebListener

ASP.NET Core 服務器基礎組件說明

IApplicationBuilderStartup類中的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。你可以自由地實現你的應用所需的功能接口,但至少必須支持IHttpRequestFeatureIHttpResponseFeature接口。

下一步

更多的信息, 請參考以下資源:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM