Listen to this Post
Kestrel is a lightweight, cross-platform web server for ASP.NET Core, enabling applications to run on Windows, Linux, and macOS. With the release of .NET 9, Kestrel has seen significant improvements, making it an even more robust choice for hosting APIs and web applications. Key enhancements include:
- Enhanced connection metrics: Detailed metadata for connection failures to aid in debugging and performance tuning.
- Improved WebSocket management: Configurable timeouts for better control over WebSocket connections.
These updates make Kestrel a compelling option for developers looking to build high-performance, cross-platform API solutions.
You Should Know: Practical Steps and Commands for Using Kestrel in ASP.NET Core
- Setting Up Kestrel in an ASP.NET Core Project
To use Kestrel as your web server, ensure your project is configured to use it. By default, ASP.NET Core projects are set up to use Kestrel. You can verify this in the `Program.cs` file:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
Kestrel is automatically configured as the web server when you run the application.
2. Configuring Kestrel in `appsettings.json`
You can customize Kestrel’s behavior using the `appsettings.json` file. For example, to configure endpoints and timeouts:
{
"Kestrel": {
"Endpoints": {
"Http": {
"Url": "http://localhost:5000"
},
"Https": {
"Url": "https://localhost:5001",
"Certificate": {
"Path": "path/to/certificate.pfx",
"Password": "your_password"
}
}
},
"Limits": {
"MaxConcurrentConnections": 100,
"MaxRequestBodySize": 10485760
}
}
}
3. Running Kestrel on Linux
To run an ASP.NET Core application with Kestrel on Linux, use the following commands:
1. Publish the application:
dotnet publish -c Release -o ./publish
2. Run the application:
cd ./publish dotnet YourApp.dll
3. Use a reverse proxy (e.g., Nginx):
Configure Nginx to forward requests to Kestrel:
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
4. Monitoring Kestrel Performance
Use the following commands to monitor Kestrel’s performance:
- Check active connections:
netstat -an | grep :5000
-
Monitor CPU and memory usage:
top -p $(pgrep -f YourApp.dll)
5. Debugging Connection Failures
With .NET 9’s enhanced connection metrics, you can log detailed metadata for connection failures. Add the following to your logging configuration:
{
"Logging": {
"LogLevel": {
"Microsoft.AspNetCore.Server.Kestrel": "Debug"
}
}
}
What Undercode Say
Kestrel has evolved into a powerful, production-ready web server for ASP.NET Core applications. Its cross-platform capabilities, combined with the latest enhancements in .NET 9, make it an excellent choice for modern API development. By leveraging Kestrel’s configurability and performance, developers can build scalable and efficient applications that run seamlessly across Windows, Linux, and macOS.
Expected Output:
- Kestrel Documentation: Microsoft Kestrel Web Server Documentation
- ASP.NET Core Deployment Guide: Deploy ASP.NET Core on Linux
- Nginx Configuration: Nginx Reverse Proxy Setup
References:
Reported By: Aramt87 Kestrel – Hackers Feeds
Extra Hub: Undercode MoN
Basic Verification: Pass ✅



