Nguon: Microsoft Learn · .NET 8.0

Host ASP.NET Core trên Windows với IIS

Nguồn: Host ASP.NET Core on Windows with IIS

Internet Information Services (IIS) là một Web Server linh hoạt, bảo mật và dễ quản lý để hosting (lưu trữ) các ứng dụng web, bao gồm ASP.NET Core.

Nền tảng được hỗ trợ

Các hệ điều hành sau được hỗ trợ:

Các ứng dụng được publish (xuất bản) cho deployment (triển khai) 32-bit (x86) hoặc 64-bit (x64) đều được hỗ trợ. Triển khai ứng dụng 32-bit với .NET SDK 32-bit (x86) trừ khi ứng dụng:

Cài đặt ASP.NET Core Module/Hosting Bundle

Tải xuống installer mới nhất bằng liên kết sau:

Installer .NET Hosting Bundle hiện tại (tải trực tiếp)

Để biết thêm hướng dẫn chi tiết về cách cài đặt ASP.NET Core Module, hoặc cài đặt các phiên bản khác nhau, xem Cài đặt .NET Hosting Bundle.

Bắt đầu

Để bắt đầu hosting website trên IIS, xem hướng dẫn bắt đầu.

Để bắt đầu hosting website trên Azure App Services, xem hướng dẫn triển khai lên Azure App Service.

Cấu hình

Để biết hướng dẫn cấu hình, xem Cấu hình nâng cao.

Tài nguyên triển khai cho quản trị viên IIS

Overlapped Recycle (Tái chế chồng chéo)

Nói chung, chúng tôi khuyên dùng mô hình như blue-green deployments cho các deployment không có downtime (thời gian ngừng hoạt động). Các tính năng như Overlapped Recycle giúp ích, nhưng không đảm bảo rằng bạn có thể thực hiện zero-downtime deployment. Để biết thêm thông tin, xem GitHub issue này.

Client certificates tùy chọn

Để biết thông tin về các ứng dụng phải bảo vệ một tập hợp con của ứng dụng bằng certificate (chứng chỉ), xem Client certificates tùy chọn.


Cấu hình ứng dụng

Bật các thành phần IISIntegration

Khi xây dựng host trong CreateHostBuilder (Program.cs), gọi CreateDefaultBuilder để bật tích hợp IIS:

csharp
public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        ...

Tùy chọn IIS

Mô hình hosting in-process (trong tiến trình)

Để cấu hình tùy chọn IIS Server, hãy bao gồm cấu hình dịch vụ cho IISServerOptions trong Program.cs. Ví dụ sau vô hiệu hóa AutomaticAuthentication:

csharp
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Server.IIS;
using Microsoft.EntityFrameworkCore;
using RPauth.Data;

var builder = WebApplication.CreateBuilder(args);

var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(connectionString));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();

builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<ApplicationDbContext>();

builder.Services.Configure<IISServerOptions>(options =>
{
    options.AutomaticAuthentication = false;
});

builder.Services.AddTransient<IClaimsTransformation, MyClaimsTransformation>();
builder.Services.AddAuthentication(IISServerDefaults.AuthenticationScheme);

builder.Services.AddRazorPages();

var app = builder.Build();
// ...
app.Run();
Tùy chọnMặc địnhMô tả
AutomaticAuthenticationtrueNếu true, IIS Server đặt HttpContext.User được xác thực bởi Windows Authentication. Nếu false, server chỉ cung cấp danh tính cho HttpContext.User và phản hồi các thách thức khi được yêu cầu tường minh bởi AuthenticationScheme. Windows Authentication phải được bật trong IIS để AutomaticAuthentication hoạt động.
AuthenticationDisplayNamenullĐặt tên hiển thị cho người dùng trên trang đăng nhập.
AllowSynchronousIOfalseLiệu I/O đồng bộ có được phép cho HttpContext.RequestHttpContext.Response.
MaxRequestBodySize30000000Lấy hoặc đặt kích thước phần thân request tối đa cho HttpRequest. Lưu ý rằng IIS tự thân có giới hạn maxAllowedContentLength sẽ được xử lý trước MaxRequestBodySize được đặt trong IISServerOptions.

Mô hình hosting out-of-process (ngoài tiến trình)

Để cấu hình tùy chọn IIS, hãy bao gồm cấu hình dịch vụ cho IISOptions. Ví dụ sau ngăn ứng dụng điền HttpContext.Connection.ClientCertificate:

csharp
services.Configure<IISOptions>(options => 
{
    options.ForwardClientCertificate = false;
});
Tùy chọnMặc địnhMô tả
AutomaticAuthenticationtrueNếu true, IIS Integration Middleware đặt HttpContext.User được xác thực bởi Windows Authentication.
AuthenticationDisplayNamenullĐặt tên hiển thị cho người dùng trên trang đăng nhập.
ForwardClientCertificatetrueNếu true và header request MS-ASPNETCORE-CLIENTCERT hiện diện, HttpContext.Connection.ClientCertificate được điền.

Proxy server và load balancer scenarios

IIS Integration Middleware và ASP.NET Core Module được cấu hình để chuyển tiếp:

Cấu hình bổ sung có thể được yêu cầu cho các ứng dụng được host đằng sau proxy server và load balancer bổ sung. Để biết thêm thông tin, xem Cấu hình ASP.NET Core để hoạt động với proxy server và load balancer.

File web.config

File web.config cấu hình ASP.NET Core Module. Một MSBuild target (_TransformWebConfig) xử lý việc tạo, chuyển đổi và publish file web.config khi project được publish.

Nếu file web.config không có trong project, file được tạo với processPatharguments đúng để cấu hình ASP.NET Core Module và được chuyển đến published output.

File web.config phải có trong deployment mọi lúc, được đặt tên đúng và có thể cấu hình site khởi động bình thường. Không bao giờ xóa file web.config khỏi production deployment.

Cấu hình IIS

Hệ điều hành Windows Server

Bật role server Web Server (IIS) và thiết lập các role service.

  1. Sử dụng wizard Add Roles and Features từ menu Manage hoặc liên kết trong Server Manager. Ở bước Server Roles, đánh dấu chọn Web Server (IIS).
  2. Sau bước Features, bước Role services tải cho Web Server (IIS). Chọn các IIS role service mong muốn hoặc chấp nhận role service mặc định.
  3. Tiến hành qua bước Confirmation để cài đặt web server role và service.

Hệ điều hành Windows desktop

Bật IIS Management ConsoleWorld Wide Web Services.

  1. Điều hướng đến Control Panel > Programs > Programs and Features > Turn Windows features on or off.
  2. Mở node Internet Information Services. Mở node Web Management Tools.
  3. Đánh dấu chọn IIS Management Console.
  4. Đánh dấu chọn World Wide Web Services.
  5. Chấp nhận các tính năng mặc định hoặc tùy chỉnh.
  6. Nếu cài đặt IIS yêu cầu khởi động lại, hãy khởi động lại hệ thống.

Cài đặt .NET Hosting Bundle

Cài đặt .NET Hosting Bundle trên hệ thống hosting. Bundle cài đặt .NET Runtime, .NET Library, và ASP.NET Core Module. Module cho phép các ứng dụng ASP.NET Core chạy đằng sau IIS.

Quan trọng: Nếu Hosting Bundle được cài đặt trước IIS, việc cài đặt bundle phải được sửa chữa. Chạy lại Hosting Bundle installer sau khi cài đặt IIS.

Tải xuống trực tiếp (phiên bản hiện tại)

Tải xuống installer bằng liên kết sau:

Installer .NET Hosting Bundle hiện tại (tải trực tiếp)

Cài đặt Hosting Bundle

  1. Chạy installer trên server. Các tham số sau có thể dùng khi chạy installer từ command shell quản trị viên:
  1. Khởi động lại IIS để nhận thay đổi với lệnh trong elevated command shell:

``console net stop was /y net start w3svc ``

Tạo IIS site

  1. Trên hệ thống hosting, tạo thư mục để chứa các thư mục và file đã publish của ứng dụng.
  2. Trong IIS Manager, mở node server trong panel Connections. Nhấp chuột phải vào thư mục Sites. Chọn Add Website.
  3. Cung cấp Site name và đặt Physical path đến thư mục deployment của ứng dụng. Cung cấp cấu hình Binding và tạo website bằng cách chọn OK.

> Cảnh báo: Không nên sử dụng top-level wildcard bindings (http://*:80/http://+:80). Chúng có thể gây ra lỗ hổng bảo mật. Sử dụng tên host tường minh thay vì wildcard.

  1. Dưới node server, chọn Application Pools.
  2. Nhấp chuột phải vào app pool của site và chọn Basic Settings.
  3. Trong cửa sổ Edit Application Pool, đặt .NET CLR version thành No Managed Code.
  4. Xác nhận process model identity có đủ quyền.

Triển khai ứng dụng

Triển khai ứng dụng đến thư mục Physical path của IIS. Web Deploy là cơ chế triển khai được khuyên dùng.

Dữ liệu được bảo vệ (Data Protection)

ASP.NET Core Data Protection stack được sử dụng bởi một số ASP.NET Core middleware, bao gồm middleware được dùng trong xác thực. Ngay cả khi Data Protection API không được gọi bởi user code, data protection nên được cấu hình để tạo key store mật mã bền vững.

Để cấu hình data protection dưới IIS nhằm duy trì key ring (vòng khóa), hãy dùng một trong các phương pháp sau:

Virtual Directories

IIS Virtual Directories không được hỗ trợ với các ứng dụng ASP.NET Core. Một ứng dụng có thể được host như một sub-application.

Sub-applications (Ứng dụng con)

Một ứng dụng ASP.NET Core có thể được host như một IIS sub-application (sub-app). Path của sub-app trở thành một phần của URL của root app.

Các liên kết static asset bên trong sub-app nên sử dụng ký hiệu tilde-slash (~/).

Cấu hình IIS với web.config

Section <system.webServer> của web.config cho các kịch bản IIS hoạt động với các ứng dụng ASP.NET Core với ASP.NET Core Module ảnh hưởng đến cấu hình IIS.

Application Pools

Mô hình hosting xác định sự cô lập app pool:

HTTP/2 support

HTTP/2 được hỗ trợ với ASP.NET Core trong các kịch bản triển khai IIS sau:

Application Initialization Module và Idle Timeout

Khi được host trong IIS bởi ASP.NET Core Module version 2:

Tài nguyên bổ sung