Kestrel是ASP.NET Core内置的跨平台Web服务器,默认情况下已经集成在应用中,开发者可以根据实际需求对它的各项参数进行自定义配置,满足不同场景的运行要求。

Kestrel基础配置方式
在ASP.NET Core应用中,最常用的配置方式是在Program.cs文件中通过ConfigureWebHostDefaults方法或者WebApplicationBuilder的WebHost属性来设置Kestrel的相关参数。
如果是使用最新的.NET 6及以上版本的顶层语句模式,配置示例如下:
var builder = WebApplication.CreateBuilder(args);
// 配置Kestrel服务器
builder.WebHost.ConfigureKestrel(serverOptions =>
{
// 基础配置内容后续会逐步添加
});
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
常用配置场景及实现
1. 绑定指定端口和地址
默认情况下Kestrel会监听5000和5001端口,我们可以通过配置修改监听的地址和端口,支持同时监听多个端点。
builder.WebHost.ConfigureKestrel(serverOptions =>
{
// 监听本地5002端口,仅HTTP
serverOptions.ListenLocalhost(5002);
// 监听所有网卡的8080端口,仅HTTP
serverOptions.ListenAnyIP(8080);
// 监听指定IP的9000端口
serverOptions.Listen(System.Net.IPAddress.Parse("192.168.0.100"), 9000);
});
2. 配置HTTPS
生产环境中通常需要启用HTTPS,Kestrel支持加载证书文件来开启HTTPS监听,也可以配置HTTP到HTTPS的自动重定向。
builder.WebHost.ConfigureKestrel(serverOptions =>
{
// 加载PFX证书开启HTTPS监听
serverOptions.ListenLocalhost(5001, listenOptions =>
{
listenOptions.UseHttps("certificate.pfx", "certificate_password");
});
// 配置HTTP到HTTPS的重定向
serverOptions.ConfigureHttpsDefaults(httpsOptions =>
{
httpsOptions.SslProtocols = System.Security.Authentication.SslProtocols.Tls12 | System.Security.Authentication.SslProtocols.Tls13;
});
});
3. 设置请求大小限制
默认情况下Kestrel对请求体大小有限制,上传大文件等场景需要手动调整这个限制,同时也可以设置请求头的大小上限。
builder.WebHost.ConfigureKestrel(serverOptions =>
{
// 设置最大请求体大小为100MB
serverOptions.Limits.MaxRequestBodySize = 100 * 1024 * 1024;
// 设置最大请求头大小为64KB
serverOptions.Limits.MaxRequestHeadersTotalSize = 65536;
// 设置单个请求头的最大大小
serverOptions.Limits.MaxRequestHeaderCount = 100;
});
4. 配置连接和请求超时
为了避免长时间占用连接资源,可以设置连接的KeepAlive超时时间和请求的最长处理时间。
builder.WebHost.ConfigureKestrel(serverOptions =>
{
// 设置KeepAlive超时时间为2分钟
serverOptions.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(2);
// 设置请求处理超时时间为30秒
serverOptions.Limits.RequestHeadersTimeout = TimeSpan.FromSeconds(30);
});
通过配置文件设置Kestrel
除了在代码中硬编码配置,也可以将Kestrel的配置项放到appsettings.json中,实现配置和代码分离,方便不同环境的切换。
首先修改appsettings.json添加配置:
{
"Kestrel": {
"EndPoints": {
"Http": {
"Url": "http://localhost:5000"
},
"Https": {
"Url": "https://localhost:5001",
"Certificate": {
"Path": "certificate.pfx",
"Password": "certificate_password"
}
}
},
"Limits": {
"MaxRequestBodySize": 104857600,
"KeepAliveTimeout": "00:02:00"
}
}
}
然后在代码中读取配置:
var builder = WebApplication.CreateBuilder(args);
// 从配置文件加载Kestrel配置
builder.WebHost.UseKestrel((context, serverOptions) =>
{
context.Configuration.GetSection("Kestrel").Bind(serverOptions);
});
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
配置注意事项
- 如果应用部署在反向代理(如Nginx、IIS)后方,不需要直接暴露Kestrel到公网,只需要监听内网端口即可。
- 证书文件的路径需要是应用运行时的相对路径或者绝对路径,确保应用有读取权限。
- 修改配置后需要重启应用才能生效,生产环境建议通过配置文件修改,避免重新编译代码。
- 不同.NET版本的Kestrel配置API可能存在细微差异,配置时建议参考对应版本的官方文档。
C#ASP.NET_CoreKestrel服务器配置修改时间:2026-06-09 05:57:20