Kestrel el servidor web para ASP.NET Core

En este tutorial, veremos el servidor web Kestrel
para ASP.NET Core. La forma en que alojamos nuestra aplicación en ASP.NET Core ha sufrido cambios drásticos en comparación con la versión anterior de ASP.NET. Kestrel
es el nuevo servidor web predeterminado que se incluye en las plantillas de proyectos de ASP.NET Core
. Se ejecuta dentro del proceso (In-Process
) de solicitud, lo que lo hace completamente autónomo.
¿Qué es Kestrel?
El Kestrel
es un servidor HTTP
basado en E/S asíncrona, multiplataforma, de código abierto y basado en eventos. Está desarrollado para alojar aplicaciones ASP.NET Core en cualquier plataforma. Se incluye por defecto en las aplicaciones ASP.NET Core.
- Kestrel es compatible con todas las plataformas y versiones compatibles con .NET Core.
- Está basado en libuv
- Kestel es una biblioteca de código abierto y está disponible en GitHub
¿Por qué el Servidor Kestrel?
Las aplicaciones ASP.NET más antiguas están estrechamente vinculadas a Internet Information Services
o IIS
.
El IIS
es un servidor web completo con todas las funciones que necesitas de un servidor web. Durante el paso del tiempo, se ha convertido en un servidor web maduro y, en el camino, ha agregado muchas funcionalidades que lo hacen más pesado. Se ha convertido en uno de los mejores servidores web que existen y, al mismo tiempo, es uno de los más lentos.
ASP.NET
, al estar estrechamente acoplado con IIS
, lleva con arrastrando la carga de IIS
Las aplicaciones ASP.NET Core recién diseñadas ahora están completamente desvinculadas de IIS
. Este desacoplamiento hace que ASP.NET Core se ejecute en cualquier plataforma, lo que lo hace verdaderamente multiplataforma.
Pero aún debe tener la capacidad de escuchar solicitudes HTTP
y enviar la respuesta al Cliente. Ahí es donde entra el servidor Kestrel
.
Usando el servidor Kestrel
Kestrel
se ejecuta en el proceso (In-Process
) en las aplicaciones ASP.NET Core. Por lo tanto, funciona independientemente del entorno en el que vive. El servidor web Kestrel
está disponible en el espacio de nombres Microsoft.AspNetCore.Server.Kestrel
Vimos las clases Program y Startup en tutoriales anteriores de ASP.NET Core
La clase Program contiene una función principal vacía estática, que es el punto de entrada a nuestra aplicación.
Usar el Servidor Kestrel en ASP.NET Core 5 y anteriores
Para .NET Core 5 y anteriores la clase de Program
contiene una función principal vacía estática, que es el punto de entrada a nuestra aplicación.
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
El método Main
invoca a CreateDefaultBuilder
, que es responsable de crear el host de la aplicación web.
CreateDefaultBuilder
es un método auxiliar (haz clic aquí para ver el código fuente)
Llama al método UseKestrel
para registrar el Kestrel
como el servidor que se utilizará para alojar nuestra aplicación.
Usar el Servidor Kestrel en ASP.NET Core 6
Las plantillas de proyecto de ASP.NET Core usan Kestrel
de forma predeterminada cuando no están alojadas con IIS
. En el siguiente Program.cs generado por la plantilla, el método WebApplication.CreateBuilder
llama a UseKestrel
internamente:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
Hay dos formas de usar el Kestel
- Por sí mismo (Alojamiento propio)
- Detrás de otro servidor web
Autohospedaje (Sef Hosting)
En el modelo Sef Hosting
, las aplicaciones ASP.NET Core
escuchan directamente las solicitudes HTTP
de Internet, como se muestra en la imagen a continuación.
El diagrama muestra cómo se utiliza el servidor web Kestrel para autohospedar una aplicación ASP.NET Core
El siguiente código muestra cómo usar el comando dotnet run cli para iniciar el servidor web Kestrel
. Para ejecutar, todo lo que necesitas hacer es ir a la carpeta del proyecto, donde se encuentra el archivo .csproj
y ejecutar el siguiente comando.
dotnet run
El Kestrel
se inicia y escucha en el puerto 7120/5120
.
Otra forma es ir a la carpeta publicada y ejecutar el siguiente comando, que activará el servidor Kestrel.
El Kestrel
se inicia y escucha en el puerto 5000/5001
.
Detrás de otro servidor web
Kestrel
no es un servidor web con todas las funciones. Pero eso es lo que lo hace rápido.
No es recomendable ejecutar Kestrel
como un servidor web independiente en el entorno de producción. Se recomienda ejecutarlo detrás de un servidor web con todas las funciones como IIS
, Nginx
, Apache
, etc. En tal escenario, el servidor web actúa como un servidor proxy inverso
El servidor proxy inverso toma la solicitud HTTP
de Internet y la pasa al servidor Kestrel
tal como se recibe.
El IIS
puede tomar la solicitud HTTP
y realizar algunos procesamientos útiles como registro, filtrado de solicitudes, reescrituras de URL
antes de pasar la solicitud a Kestrel
.
El siguiente diagrama muestra cómo se implementa:
Servidor web Kestrel ejecutándose detrás de otro servidor web como IIS
, NGINX
, Apache
, etc.
Hay muchas razones por las que deberías usar este modelo en producción.
- Seguridad
- Puedes limitar su área de superficie expuesta. Proporciona una capa adicional opcional de configuración y defensa.
- Simplifica el equilibrio de carga
- Configuración
SSL
- Solo tu servidor proxy inverso requiere un certificado
SSL
, y ese servidor puede comunicarse con tus servidores de aplicaciones en la red interna utilizandoHTTP
simple. - Compartir
IP
única con varias direcciones - Solicitud de filtrado, registro y reescritura de
URL
, etc. - Puedes asegurar que la aplicación se reinicie si se bloquea
El método CreateDefaultBuilder
llama a UseIISIntegration
, que le dice a ASP.NET
que la aplicación usará IIS
como un proxy inverso frente a Kestrel.
Beneficios del servidor web Kestrel
Kestrel
es rápido. No es un sitio web con todas las funciones y no proporciona las muchas funciones que esperas de un servidor web estándar. Por lo tanto, lo hace ligero en diseño y rápido.- Es compatible con todas las versiones de .
NET Core
- Es multiplataforma. Puedes ejecutarlo en Windows/Linux o Mac. Esto es algo que
ASP.NET
siempre nunca pudo hacer - Es muy sencillo de configurar y ejecutar. De hecho, ya está configurado, cuando creas un nuevo proyecto
ASP.NET Core
enVisual Studio
- Soporta
HTTPS
- Admite
HTTP/2
(excepto en macOS, pero será compatible en una versión futura).
Alternativas a Kestrel
Kestrel no es la única forma de hospedar aplicaciones ASP.NET Core
. Hay otra implementación de servidor web disponible en Windows conocida como HTTP.SYS
El HTTP.sys es un servidor HTTP
solo para Windows basado en el controlador del kernel Http.Sys.
Resumen
En este tutorial, aprendiste sobre el servidor web Kestrel. Kestrel es un servidor web en proceso (In-Process) creado para ejecutar aplicaciones ASP.NET Core en cualquier plataforma.