Host ASP.NET Core trên Windows với 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ợ:
- Windows 7 trở lên
- Windows Server 2012 R2 trở lên
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:
- Yêu cầu không gian địa chỉ bộ nhớ ảo lớn hơn có sẵn cho ứng dụng 64-bit.
- Yêu cầu stack size IIS lớn hơn.
- Có các dependency (phụ thuộc) native 64-bit.
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
- Tài liệu IIS
- Bắt đầu với IIS Manager trong IIS
- Triển khai ứng dụng .NET
- ASP.NET Core Module (ANCM) cho IIS
- Cấu trúc thư mục ASP.NET Core
- IIS Modules với ASP.NET Core
- Khắc phục sự cố ASP.NET Core trên Azure App Service và IIS
- Tham chiếu lỗi thông thường cho Azure App Service và IIS với ASP.NET Core
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:
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:
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ọn | Mặc định | Mô tả |
|---|---|---|
AutomaticAuthentication | true | Nế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. |
AuthenticationDisplayName | null | Đặt tên hiển thị cho người dùng trên trang đăng nhập. |
AllowSynchronousIO | false | Liệu I/O đồng bộ có được phép cho HttpContext.Request và HttpContext.Response. |
MaxRequestBodySize | 30000000 | Lấ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:
services.Configure<IISOptions>(options =>
{
options.ForwardClientCertificate = false;
});| Tùy chọn | Mặc định | Mô tả |
|---|---|---|
AutomaticAuthentication | true | Nếu true, IIS Integration Middleware đặt HttpContext.User được xác thực bởi Windows Authentication. |
AuthenticationDisplayName | null | Đặt tên hiển thị cho người dùng trên trang đăng nhập. |
ForwardClientCertificate | true | Nế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:
- Scheme (HTTP/HTTPS).
- Địa chỉ IP từ xa nơi request bắt nguồn.
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 processPath và arguments đú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.
- 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).
- 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.
- 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 Console và World Wide Web Services.
- Điều hướng đến Control Panel > Programs > Programs and Features > Turn Windows features on or off.
- Mở node Internet Information Services. Mở node Web Management Tools.
- Đánh dấu chọn IIS Management Console.
- Đánh dấu chọn World Wide Web Services.
- Chấp nhận các tính năng mặc định hoặc tùy chỉnh.
- 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
- 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:
OPT_NO_ANCM=1: Bỏ qua cài đặt ASP.NET Core Module.OPT_NO_RUNTIME=1: Bỏ qua cài đặt .NET runtime. Được dùng khi server chỉ host self-contained deployments (SCD).OPT_NO_SHAREDFX=1: Bỏ qua cài đặt ASP.NET Shared Framework.OPT_NO_X86=1: Bỏ qua cài đặt x86 runtimes.OPT_NO_SHARED_CONFIG_CHECK=1: Vô hiệu hóa kiểm tra IIS Shared Configuration.
- 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
- 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.
- 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.
- 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/ và 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.
- Dưới node server, chọn Application Pools.
- Nhấp chuột phải vào app pool của site và chọn Basic Settings.
- Trong cửa sổ Edit Application Pool, đặt .NET CLR version thành No Managed Code.
- 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:
- Tạo Data Protection Registry Keys: Data protection keys được sử dụng bởi các ứng dụng ASP.NET Core được lưu trữ trong registry bên ngoài ứng dụng.
- Cấu hình IIS Application Pool để tải user profile: Đặt Load User Profile thành
True. Khi đặt thànhTrue, các khóa được lưu trữ trong thư mục user profile. - Sử dụng file system làm key ring store: Điều chỉnh code ứng dụng để sử dụng file system làm key ring store.
- Đặt machine-wide policy cho data protection: Hệ thống data protection hỗ trợ hạn chế việc đặt machine-wide policy mặc định.
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:
- In-process hosting: Các ứng dụng được yêu cầu chạy trong các app pool riêng biệt.
- Out-of-process hosting: Chúng tôi khuyên cách ly các ứng dụng khỏi nhau bằng cách chạy mỗi ứng dụng trong app pool riêng.
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:
- In-process
- Windows Server 2016/Windows 10 trở lên; IIS 10 trở lên
- Kết nối TLS 1.2 trở lên
- Out-of-process
- Windows Server 2016/Windows 10 trở lên; IIS 10 trở lên
- Các kết nối edge server đối diện công khai sử dụng HTTP/2, nhưng kết nối reverse proxy đến Kestrel server sử dụng HTTP/1.1.
- Kết nối TLS 1.2 trở lên
Application Initialization Module và Idle Timeout
Khi được host trong IIS bởi ASP.NET Core Module version 2:
- Application Initialization Module: Các ứng dụng được host in-process hoặc out-of-process có thể được cấu hình để khởi động tự động khi worker process khởi động lại hoặc server khởi động lại.
- Idle Timeout: Các ứng dụng được host in-process có thể được cấu hình để không timeout trong các giai đoạn không hoạt động.