日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ASPNET Core 2.x中的Kestrel服务器

發(fā)布時間:2023/12/4 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASPNET Core 2.x中的Kestrel服务器 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Kestrel是一個基于libuv的跨平臺ASP.NET Core web服務(wù)器,libuv是一個跨平臺的異步I/O庫。ASP.NET Core模板項目使用Kestrel作為默認(rèn)的web服務(wù)器。

Kestrel支持以下功能:

  • HTTPS

  • 用于啟用不透明升級的WebSockets

  • 位于Nginx之后的高性能Unix sockets

Kestrel 被.NET Core支持的所有平臺和版本所支持

查看和下載示例代碼

?何時一起使用Kestrel和反向代理服務(wù)器?

ASP.NET CORE 2.x

? ? ?你可以單獨或者與反向代理服務(wù)器(如?IIS, Nginx, or Apache)一起使用Kestrel。反向代理從互聯(lián)網(wǎng)接受HTTP請求,預(yù)處理后轉(zhuǎn)發(fā)給Kestrel.

如果Kestrel僅暴露與內(nèi)網(wǎng)中,有或沒有反向代理的配置。

? ?一個需要反向代理的場景是,你有多個需要在一個服務(wù)器上運行并共享同一端口的應(yīng)用。因為Kestrel不支持在多進程間共享同一端口和同一個IP,在此情況下無法工作。當(dāng)你配置Kestrel監(jiān)聽某個端口時,它會接管所有的流量,而不管主機標(biāo)頭是什么。反向代理可以共享出多個端口,然后轉(zhuǎn)發(fā)給Ketrel的唯一IP和端口。

? ? 即時反向代理不是必須的,但在某些場景下,使用反向代理是一個更好的選擇:

  • 它可以限定你面對的網(wǎng)絡(luò)區(qū)域.

  • 它可以提供多一個附加層,以提供附加的的防護.

  • 它可以更好地與現(xiàn)有架構(gòu)集成。

  • 使用它也可以簡化負(fù)載均衡和SSL設(shè)置 -- 只要你的反向代理服務(wù)器需要SSL證書,并且該服務(wù)器可以和你的應(yīng)用在內(nèi)部網(wǎng)中通過普通HTTP進行通信。


? ???如何在ASP.NET CORE APP中使用KESTREL

?ASP.NET CORE 2.x

? ??Microsoft.AspNetCore.Server.Kestrel?包已經(jīng)包含在?Microsoft.AspNetCore.All metapackage中.

ASP.NET Core 工程模板缺省使用 Kestrel 。在?Program.cs中, 模板代碼為?CreateDefaultBuilder, 它用這句語句調(diào)用?UseKestrel?:

public static void Main(string[] args) {BuildWebHost(args).Run(); }public static IWebHost BuildWebHost(string[] args) => ? ?WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>().UseKestrel(options =>{options.Listen(IPAddress.Loopback, 5000);options.Listen(IPAddress.Loopback, 5001, listenOptions =>{listenOptions.UseHttps("testCert.pfx", "testPassword");});}).Build();

?如果你要配置Kestrel選項, 請在?Program.cs?如下例所示調(diào)用?UseKestrel?:

public static void Main(string[] args) {BuildWebHost(args).Run(); }public static IWebHost BuildWebHost(string[] args) =>WebHost.CreateDefaultBuilder(args).UseStartup<Startup>() ? ? ? ?.UseKestrel(options => ? ? ? ?{ ? ? ? ? ? ?options.Listen(IPAddress.Loopback, 5000); ? ? ? ? ? ?options.Listen(IPAddress.Loopback, 5001, listenOptions => ? ? ? ? ? ?{ ? ? ? ? ? ? ? ?listenOptions.UseHttps("testCert.pfx", "testPassword"); ? ? ? ? ? ?}); ? ? ? ?}).Build();

?Kestrel 選項

?

? ?Kestrel web server有一些約束選項,做面對互聯(lián)網(wǎng)的不是時會非常用用。下面是你能設(shè)置的一些限制條件:

  • 最大連接客戶數(shù)

  • 最大請求體大小Maximum request body size

  • 最小請求提數(shù)據(jù)率Minimum request body data rate

你需要在?KestrelServerOptions?類的Limits屬性中設(shè)置這些約束?。??Limits?屬性控制?KestrelServerLimits?類的實例.

最大連接客戶數(shù)

參考一下代碼:

.UseKestrel(options =>{ ? ?options.Limits.MaxConcurrentConnections = 100; ? ?options.Limits.MaxConcurrentUpgradedConnections = 100;options.Limits.MaxRequestBodySize = 10 * 1024;options.Limits.MinRequestBodyDataRate = new MinDataRate(bytesPerSecond: 100, gracePeriod: TimeSpan.FromSeconds(10));options.Limits.MinResponseDataRate = new MinDataRate(bytesPerSecond: 100, gracePeriod: TimeSpan.FromSeconds(10));options.Listen(IPAddress.Loopback, 5000);options.Listen(IPAddress.Loopback, 5001, listenOptions =>{listenOptions.UseHttps("testCert.pfx", "testPassword");}); })

Maximum request body size

? ? 缺省值為30,000,000byte, 大約是28.6MB。

? ?在ASP .NET CORE MVC 的APP中,建議在action方法中使用?RequestSizeLimit?屬性來重寫它:

[RequestSizeLimit(100000000)]public IActionResult MyActionMethod()

? 下面是一個配置整個應(yīng)用內(nèi)每一個請求的Maximum request body size的例子:

.UseKestrel(options =>{options.Limits.MaxConcurrentConnections = 100;options.Limits.MaxConcurrentUpgradedConnections = 100; ? options.Limits.MaxRequestBodySize = 10 * 1024;options.Limits.MinRequestBodyDataRate = new MinDataRate(bytesPerSecond: 100, gracePeriod: TimeSpan.FromSeconds(10));options.Limits.MinResponseDataRate = new MinDataRate(bytesPerSecond: 100, gracePeriod: TimeSpan.FromSeconds(10));options.Listen(IPAddress.Loopback, 5000);options.Listen(IPAddress.Loopback, 5001, listenOptions =>{listenOptions.UseHttps("testCert.pfx", "testPassword");}); })

? ?你也可以在一個中間件中設(shè)置特定請求的值:

app.Run(async (context) =>{ ? ?context.Features.Get<IHttpMaxRequestBodySizeFeature>() ? ? ? ?.MaxRequestBodySize = 10 * 1024 ? ?context.Features.Get<IHttpMinRequestBodyDataRateFeature>() ? ? ? ?.MinDataRate = new MinDataRate(bytesPerSecond: 100, gracePeriod: TimeSpan.FromSeconds(10)); ? ?context.Features.Get<IHttpMinResponseDataRateFeature>() ? ? ? ?.MinDataRate = new MinDataRate(bytesPerSecond: 100, gracePeriod: TimeSpan.FromSeconds(10));

?Kestrel的其他選項,參考下面的類:

  • KestrelServerOptions

  • KestrelServerLimits

  • ListenOptions

?終端配置

? ? 缺省情況下,ASP.NET CORE綁定 http://localhost:5000. 通過在KestrelServerOptions上調(diào)用Listen 或者ListenUnixSocket方法可以配置Kestrel監(jiān)聽的URL和端口。(UseUrls, urls命令行參數(shù),ASPNETCORE_URLS環(huán)境變量也能工作,定有一些限制,參考這里。

?綁定到一個TCP socket

? 一下,Listen?方法綁定一個TCP socket, ?lumbda 選項配置一個SSL驗證:

public static void Main(string[] args) {BuildWebHost(args).Run(); }public static IWebHost BuildWebHost(string[] args) =>WebHost.CreateDefaultBuilder(args).UseStartup<Startup>() ? ? ? ?.UseKestrel(options => ? ? ? ?{ ? ? ? ? ? ?options.Listen(IPAddress.Loopback, 5000); ? ? ? ? ? ?options.Listen(IPAddress.Loopback, 5001, listenOptions => ? ? ? ? ? ?{ ? ? ? ? ? ? ? ?listenOptions.UseHttps("testCert.pfx", "testPassword"); ? ? ? ? ? ?}); ? ? ? ?}).Build();

? ? 請注意這個例子是如何用ListenOptions為部分終端配置SSL的。你可以用同一個API為部分終端配置其他Kestrel設(shè)置。

? ?在windows系統(tǒng)中,你可以使用PowerShell的命令?New-SelfSignedCertificate生成自簽名SLL證書,當(dāng)然也有其他更好用的第三方工具生成你的自簽名證書,如:

  • SelfCert

  • Makecert UI

? ?在macOS 和 Linux你可以使用?OpenSSL創(chuàng)建自己的自簽名證書。更多信息請參考?Setting up HTTPS for development.

綁定到Unix socket

You can listen on a Unix socket for improved performance with Nginx, as shown in this example:

.UseKestrel(options =>{options.ListenUnixSocket("/tmp/kestrel-test.sock");options.ListenUnixSocket("/tmp/kestrel-test.sock", listenOptions =>{listenOptions.UseHttps("testCert.pfx", "testpassword");}); })

Port 0

如果你指定端口號為0, Kestrel 會動態(tài)綁定一個可用的端口.下面的例子顯示如何找到Kestrel運行時實際綁定了哪個端口:

public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory) { ? ?var serverAddressesFeature = app.ServerFeatures.Get<IServerAddressesFeature>();app.UseStaticFiles();app.Run(async (context) =>{context.Response.ContentType = "text/html"; ? ? ? ?await context.Response.WriteAsync("<p>Hosted by Kestrel</p>"); ? ? ? ?if (serverAddressesFeature != null){ ? ? ? ? ? ?await context.Response ? ? ? ? ? ? ? ?.WriteAsync("<p>Listening on the following addresses: " + ? ? ? ? ? ? ? ? ? ?string.Join(", ", serverAddressesFeature.Addresses) + ? ? ? ? ? ? ? ? ? ?"</p>");} ? ? ? ?await context.Response.WriteAsync($"<p>Request URL: {context.Request.GetDisplayUrl()}<p>");}); }

UserUrsl的限制?

IIS的終端配置?

URL prefixes

原文地址:http://www.cnblogs.com/ccjungle/p/7514198.html


.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關(guān)注

總結(jié)

以上是生活随笔為你收集整理的ASPNET Core 2.x中的Kestrel服务器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。