Site icon Knowledge Base| Kiến thức Dịch vụ P.A Việt Nam

Triển khai ứng dụng ASP.NET Core trên Server Linux với Kestrel Apache Nginx

Kestrel Server trong ASP.NET Core

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 …

 

Cấu hình Kestrel trong ASP.NET core

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)

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   X-Forwarded-Proto 

using Microsoft.AspNetCore.HttpOverrides;

...

app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});

app.UseAuthentication();

 

Cài đặt .Net Core runtime trên Server Linux, môi trường chạy ASP.NET Core

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

 

Publish ứng dụng ASP.NET Core và upload lên Server

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

 

Dùng Nginx trên Linux chạy ASP.NET Core

Đầ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

 

Dùng Apache trên Linux chạy ASP.NET Core

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.

4.5 / 5 ( 167 bình chọn )
Exit mobile version