ASPNET Core 2.x中的Kestrel服务器
来源:互联网 发布:天通金行情分析软件 编辑:程序博客网 时间:2024/05/21 14:44
Kestrel是一个基于libuv的跨平台ASP.NET Core web服务器,libuv是一个跨平台的异步I/O库。ASP.NET Core模板项目使用Kestrel作为默认的web服务器。
Kestrel支持以下功能:
HTTPS
用于启用不透明升级的WebSockets
位于Nginx之后的高性能Unix sockets
Kestrel 被.NET Core支持的所有平台和版本所支持
查看和下载示例代码
何时一起使用Kestrel和反向代理服务器?
ASP.NET CORE 2.x
你可以单独或者与反向代理服务器(如 IIS, Nginx, or Apache)一起使用Kestrel。反向代理从互联网接受HTTP请求,预处理后转发给Kestrel.
如果Kestrel仅暴露与内网中,有或没有反向代理的配置。
一个需要反向代理的场景是,你有多个需要在一个服务器上运行并共享同一端口的应用。因为Kestrel不支持在多进程间共享同一端口和同一个IP,在此情况下无法工作。当你配置Kestrel监听某个端口时,它会接管所有的流量,而不管主机标头是什么。反向代理可以共享出多个端口,然后转发给Ketrel的唯一IP和端口。
即时反向代理不是必须的,但在某些场景下,使用反向代理是一个更好的选择:
它可以限定你面对的网络区域.
它可以提供多一个附加层,以提供附加的的防护.
它可以更好地与现有架构集成。
使用它也可以简化负载均衡和SSL设置 -- 只要你的反向代理服务器需要SSL证书,并且该服务器可以和你的应用在内部网中通过普通HTTP进行通信。
如何在ASP.NET CORE APP中使用KESTREL
ASP.NET CORE 2.x
Microsoft.AspNetCore.Server.Kestrel 包已经包含在 Microsoft.AspNetCore.All metapackage中.
ASP.NET Core 工程模板缺省使用 Kestrel 。在 Program.cs中, 模板代码为 CreateDefaultBuilder
, 它用这句语句调用 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 如下例所示调用 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有一些约束选项,做面对互联网的不是时会非常用用。下面是你能设置的一些限制条件:
最大连接客户数
最大请求体大小Maximum request body size
最小请求提数据率Minimum request body data rate
你需要在 KestrelServerOptions 类的Limits属性中设置这些约束 。 Limits
属性控制 KestrelServerLimits 类的实例.
最大连接客户数
参考一下代码:
.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()
下面是一个配置整个应用内每一个请求的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"); });})
你也可以在一个中间件中设置特定请求的值:
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上调用Listen 或者ListenUnixSocket方法可以配置Kestrel监听的URL和端口。(UseUrls, urls命令行参数,ASPNETCORE_URLS环境变量也能工作,定有一些限制,参考这里。
绑定到一个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设置。
在windows系统中,你可以使用PowerShell的命令 New-SelfSignedCertificate生成自签名SLL证书,当然也有其他更好用的第三方工具生成你的自签名证书,如:
SelfCert
Makecert UI
在macOS 和 Linux你可以使用 OpenSSL创建自己的自签名证书。更多信息请参考 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 会动态绑定一个可用的端口.下面的例子显示如何找到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社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注
- ASPNET Core 2.x中的Kestrel服务器
- ASP.NET Core的Kestrel服务器
- ASP.NET Core的Kestrel服务器
- ASP.NET Core Web服务器 Kestrel和Http.sys 特性详解
- Kestrel持久化队列服务器
- ASP.NET Core Kestrel部署HTTPS
- ASP.NET Core Kestrel 中使用 HTTPS (SSL)
- ASP.NET Core Kestrel 中使用 HTTPS (SSL)
- 结合Jexus + Kestrel 部署 asp.net core 生产环境
- (翻译) 怎样移除IIS 响应中的 Server, X-AspNet-Version, X-AspNetMvc-Version 和 X-Powered-By
- 移除http响应中的多余的头(X-AspNet-Version,Server等)
- aspnet中的cookie工作机制
- aspnet中的http处理程序
- ASPNET
- asp.net core 负载均衡集群搭建(centos7+nginx+supervisor+kestrel)
- ASPNET服务器控件和客户端脚本
- ASPNET服务器控件和客户端脚本
- ASPNET服务器控件和客户端脚本
- Java JVM:内存溢出(栈溢出,堆溢出,持久代溢出以及 nable to create native thread)
- asp.net core mvc View Component 应用
- .net core之ACG小站爬虫(一)
- .net core之ACG小站爬虫(二)
- Azure School与开源
- ASPNET Core 2.x中的Kestrel服务器
- 体验 ASP.NET Core 中的多语言支持(Localization)
- Fibonacci数列求余
- asp.net core 2.0 web api基于JWT自定义策略授权
- ASP.NET Core Web服务器 Kestrel和Http.sys 特性详解
- 王者荣耀是怎样炼成的(一)《王者荣耀》用什么开发,游戏入门,unity3D介绍
- Centos7 &amp; Docker &amp; Jenkins &amp; ASP.NET Core
- Unity3d&amp;C#分布式游戏服务器ET框架介绍-组件式设计
- 学习ASP.NET Core,怎能不了解请求处理管道[1]: 中间件究竟是个什么东西?