Kestrel el servidor web para ASP.NET Core

Estrada Web Group
Estrada Web Group
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.

Servidor Kestrel para ASP.NET Core

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.

Servidor Kestrel ASP.NET Core

Otra forma es ir a la carpeta publicada y ejecutar el siguiente comando, que activará el servidor Kestrel.

Kestrel ASPNET Core Net 6.0

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:

Como usar un servidor Kestrel en ASP.NET Core

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.

  1. Seguridad
  2. Puedes limitar su área de superficie expuesta. Proporciona una capa adicional opcional de configuración y defensa.
  3. Simplifica el equilibrio de carga
  4. Configuración SSL
  5. Solo tu servidor proxy inverso requiere un certificado SSL, y ese servidor puede comunicarse con tus servidores de aplicaciones en la red interna utilizando HTTP simple.
  6. Compartir IP única con varias direcciones
  7. Solicitud de filtrado, registro y reescritura de URL, etc.
  8. 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

  1. 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.
  2. Es compatible con todas las versiones de .NET Core
  3. Es multiplataforma. Puedes ejecutarlo en Windows/Linux o Mac. Esto es algo que ASP.NET siempre nunca pudo hacer
  4. Es muy sencillo de configurar y ejecutar. De hecho, ya está configurado, cuando creas un nuevo proyecto ASP.NET Core en Visual Studio
  5. Soporta HTTPS
  6. 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.

 

 

 

Compartir artículo:

Más artículos geniales

Aprende a integrar pagos con PayPal en ASP.NET Core: Cómo incluir botones de pago PayPal inteligente en mi página web

Aprende a integrar pagos con PayPal en ASP.NET Core: Cómo incluir botones de pago PayPal inteligente en mi página web

En este artículo te enseñare a incluir tus primeros botones de pago de PayPal para utilizarlo en ASP.NET Core para recibir pagos en tu página web

Ver artículo completo
¿Qué es la clase Startup.cs de ASP.NET Core?

¿Qué es la clase Startup.cs de ASP.NET Core?

En este artículo, aprenderás el rol de la clase Startup en ASP.NET Core. En el artículo pasado aprendimos cómo la clase Program es responsable de crear un Web Host y configurarlo

Ver artículo completo

Manténgase actualizado

Obtenga excelente contenido en su bandeja de entrada todas las semanas.
Solo contenido excelente, no compartimos su correo electrónico con terceros.
Subir al inicio de la pantalla