Bạn Tìm Gì Hôm Nay ...?
Tất cả đều có chỉ trong 1 nốt nhạc !
Nếu cần hỗ trợ chi tiết gọi 1900 9477
Kestrel là một máy chủ web đa nền tảng nó được tích hợp sẵn và chạy mặc định trong các ứng dụng asp.net khởi tạo từ các template (Asp.net core mvc, asp.net razor page … đã biết). Có nghĩa khi bạn build ứng dụng asp.net, chạy nó thì sẽ tự động chạy web server Kestrel
Trong phần này, sẽ tìm hiểu một số cấu hình cơ bản để có thể áp dụng làm cơ sở chuẩn bị cho việc publish ứng dụng, triển khai ứng dụng trên môi trường product.
Có thể cấu hình sử dụng Kestrel với hai trường hợp:
Dùng Kestrel trực tiếp nhận các yêu cầu Http gửi đến
Sử dụng Kestrel sau reverse proxy server (IIS, Apache, Nginx) – các reverse proxy server nhận các yêu cầu Http gửi đến, rồi chuyển cho Kestrel
Ở môi trường product thì không nên sử dụng trực tiếp Kestrel mà hãy dùng Reverse Proxy Server (apache,nginx) vì nó cung cấp nhiều chức năng cao cấp cho một máy chủ web, dễ dàng cấu hình https, dễ dàng tích hợp trên hạ tầng có sẵn, cung cấp nhiều lớp bảo mật …
Khi khởi tạo ứng dụng ASP.NET từ các template, bao giờ cũng có file Program.cs trong đó định nghĩa hàm Main – gọi CreateHostBuilder để chạy ứng dụng, code mặc định này đã sử dụng và chạy Kestrel
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
Phụ thuộc vào môi trường chạy ứng dụng mà Kestrel chạy và lắng nghe ở các cổng khác nhau theo cấu hình của môi trường. Trong môi trường phát triển, thường nó sẽ lắng nghe ở cổng 5000 (http) và cổng 5001 (https). Cổng này có thể thiết lập qua biến môi trường hệ thống ASPNETCORE_URLS (ví dụ có thiết lập biến môi trường ASPNETCORE_URLS=https://+:443;http://+:80 thì Kestrel chạy và lắng nghe cổng 443 và 80)
Sử dụng Kestrel phía sau các web Server khác (Apache, Nginx) thì nên sử dụng cách này (UseUrls), và chỉ cần lắng nghe ở giao thức http, còn https được cấu hình ở server phía trước (Apache, Nginx).
Để sử dụng chính xác Kestrel với nginx, apache cần thêm vào đầu Startup.configure. Cấu hình X-Forwarded-For và X-Forwarded-Proto
using Microsoft.AspNetCore.HttpOverrides;
...
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
app.UseAuthentication();
Cài đặt trên CentOS 7
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
sudo yum install aspnetcore-runtime-5.0
Cài đặt trên CentOS 8
sudo dnf install aspnetcore-runtime-5.0
Cài đặt trên Ubuntu 20.04
wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt-get update; \
sudo apt-get install -y apt-transport-https && \
sudo apt-get update && \
sudo apt-get install -y aspnetcore-runtime-5.0
Sau khi cài đặt hoàn tất, có thể kiểm tra phiên bản dotnet runtime trên server bằng lệnh : dotnet –info
Kết quả là xuất ứng dụng ra thư mục app/publish, bạn dùng thư mục này để phân phối – triển khai chạy ứng dụng trên server. Trong thư mục có file dll tên ứng dụng dùng để chạy ứng dụng.
Kiểm tra chạy ứng dụng trên Server với lệnh sau:
dotnet tên-ứng-dụng.dll
Khi xuất hiện dòng chữ : Now listening on: http://localhost:5000 là ứng dụng đã hoạt động được
Đầu tiên bạn phải cài đặt nginx nếu server của bạn chưa có.
Cài đặt nginx trên CentOS 7 bạn cần tạo thêm file repo /etc/yum.repos.d/nginx.repo với nội dung
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=1
Chạy lệnh cài đặt nginx : yum install nginx
Cấu hình Nginx
Mở file cấu hình /etc/nginx/conf.d/default.conf sửa thành
server {
listen 80;
server_name pavietnam.demo *.pavietnam.demo;
location / {
proxy_pass http://127.0.0.1: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;
}
}
File cấu hình này thiết lập nginx lắng nghe ở cổng 80, cho các truy vấn đến từ tên miền pavietnam.demo, nó chuyển traffic đến ứng dụng ASP.NET Core ở cổng 5000
Nếu chưa có máy chủ Apache, bạn hãy cài vào:
yum -y install httpd mod_ssl mod_rewrite
File cấu hình chung của Apache ở đường dẫn: /etc/httpd/conf/httpd.conf
Để cấu hình Apache như một Proxy – chuyển hướng các yêu cầu đến ASP.NET, hãy thêm cấu hình vào như sau
<VirtualHost *:*>
RequestHeader set "X-Forwarded-Proto" expr="%{REQUEST_SCHEME}e"
</VirtualHost>
<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:5000/
ProxyPassReverse / http://127.0.0.1:5000/
ServerName pavietnam.demo
ServerAlias *.pavietnam.demo
ErrorLog ${APACHE_LOG_DIR}mvcblog-error.log
CustomLog ${APACHE_LOG_DIR}mvcblog-access.log common
</VirtualHost>
Với cấu hình trên, Apache lắng nghe ở cổng 80, khi truy cập với tên miền pavietnam.demo thì nó sẽ chuyển các yêu cầu tới ứng dụng ở cổng 5000.