Kestrel Web Server dùng trong ASP .NET Core


Trong bài viết này chúng ta sẽ tìm hiểu về Kestrel, một web server dành cho ASP.NET Core. Cách mà chúng ta host ứng dụng trong ASP.NET Core đã thay đổi so với phiên bản ASP.NET cũ. Kestrel là cách mới để host ứng dụng ASP.NET Core. Nó chạy ứng dụng độc lập và hoàn toàn có thể tự host được.


Kestrel là gì?

Kestrel là một HTTP web server mã nguồn mở (open source), đa nền tảng (cross-platform), hướng sự kiện (event-driven) và bất đồng bộ (asynchronous I/O). Nó được phát triển để chạy ứng dụng ASP.NET Core trên bất cứ nền tảng nào. Nó được thêm vào mặc định trong ứng dụng ASP.NET Core.
Kestrel là một mã nguồn mở trên Github. Source code bạn có thể xem ở đây

Tại sao sử dụng Kestrel

Ứng dụng ASP.NET cũ thường dính chặt vào IIS (Internet Information Service). IIS là một web server với tất cả các tính năng đầy đủ cần có. Nó được phát triển từ khá lâu và rất trưởng thành, nhưng nó cồng kềnh và nặng. Nó trở thành một trong những Web server tốt nhất ở thời điểm hiện tại nhưng nó cũng là một trong những thứ chậm nhất. ASP.NET dính chặt vào IIS cũng là gánh nặng cho IIS.
Thiết kế mới của ứng dụng ASP.NET Core giờ đây hoàn toàn tách rời khỏi IIS. Điều này tạo cho ASP.NET Core có thể chạy trên bất cứ nền tảng nào. Nhưng nó vẫn có thể lắng nghe các HTTP Request và gửi lại response về cho client. Đó là Kestrel.

Sử dụng Kestrel

Kestrel chạy in-process trong ứng dụng ASP.NET Core. Vì thế nó chạy độc lập với môi trường. Kestrel web server nằm trong thư viện Microsoft.AspNetCore.Server.Kestrel. Khi khởi tạo một ứng dụng ASP .NET Core thì việc khởi tạo và chạy Kestrel được thực hiện trong file Program.cs


Phương thức Main gọi đến CreateDefaultBuilder, có trách nhiệm tạo một host cho ứng dụng. (Host là nơi chứa ứng dụng để chạy). CreateDefaultBuilder đăng ký Kestrel như là server sẽ sử dụng trong ứng dụng.

Có 2 cách để sử dụng Kestrel
Tự host (Self Hosting)
Đằng sau một Web server khác

Tự host (Self Hosting)
Mô hình self hosting của ASP.NET Core là lắng nghe trực tiếp các HTTP Request từ internet như hình dưới đây:



Đằng sau Web Server khác
Kestrel không phải là một web server đầy đủ tính năng. Nhưng nó nhanh. Nó không đủ mạnh để chạy Kestrel một mình trên môi trường Production. Nó được đề xuất chạy đằng sau một Web Server Fully Feature như IIS, Nginx hay Apache…Trong kịch bản này các web server khác như là một reverse proxy server (máy chủ ủy quyền). Các Reverse proxy server sẽ lấy HTTP Request từ internet và gửi sang Kestrel. IIS có thể lấy HTTP Request và thực hiện một số các xử lý như ghi log, lọc request, rewrite-url trước khi gửi sang cho Kestrel.



Có nhiều lý do tại sao chúng ta sử dụng mô hình này cho môi trường Production.
  • Bảo mật: Nó có thể hạn chế việc phơi ra ngoài những gì không cần thiết và nó cũng cho chúng ta các tùy chọn về cấu hình và bảo vệ ứng dụng.
  • Dễ dàng cài đặt cân bằng tải
  • Cài đặt SSL: Chỉ các máy chủ ủy quyền cần các chứng chỉ SSL, còn các server này có thể làm việc với ứng dụng của bạn trên mạng nội bộ sử dùng HTTP thuần.
  • Chia sẻ một IP với nhiều địa chỉ
  • Lọc các Request, ghi log và rewrite-URL ...
  • Nó có thể restart ứng dụng nếu bị crash.
Phương thức CreateDefaultBuilder gọi UseIISIntegration, sẽ nói co ASP.NET rằng ứng dụng sử dụng IIS như là một reverse proxy server đằng trước Kestrel.

Thay thế cho Kestrel

Kestrel không phải là cách duy nhất để host ứng dụng ASP.NET Core. Có một web server khác triển khai có sẵn trên Windows là HTTP.sys.

HTTP.sys là một HTTP Server dựa trên Http.Sys kernel driver và nó chỉ sử dụng trên Windows.

Các bạn có thể tìm hiểu thêm cách sử dụng HTTP.sys với ASP .NET Core tại đây


Tiếp tục cập nhật ...