IIS modules với ASP.NET Core
Một số IIS module native và tất cả IIS managed module không thể xử lý các yêu cầu cho ứng dụng ASP.NET Core. Trong nhiều trường hợp, ASP.NET Core cung cấp giải pháp thay thế cho các kịch bản được giải quyết bởi các IIS module native và managed.
Native modules (module bản địa)
Bảng cho biết các IIS native module hoạt động với các ứng dụng ASP.NET Core và ASP.NET Core Module.
| Module | Hoạt động với ứng dụng ASP.NET Core | Tùy chọn ASP.NET Core |
|---|---|---|
Anonymous Authentication AnonymousAuthenticationModule | Có | |
Basic Authentication BasicAuthenticationModule | Có | |
Client Certification Mapping Authentication CertificateMappingAuthenticationModule | Có | |
CGI CgiModule | Không | |
Configuration Validation ConfigurationValidationModule | Có | |
HTTP Errors CustomErrorModule | Không | Status Code Pages Middleware |
Custom Logging CustomLoggingModule | Có | |
Default Document DefaultDocumentModule | Không | Default Files Middleware |
Digest Authentication DigestAuthenticationModule | Có | |
Directory Browsing DirectoryListingModule | Không | Directory Browsing Middleware |
Dynamic Compression DynamicCompressionModule | Có | Response Compression Middleware |
Failed Requests Tracing FailedRequestsTracingModule | Có | ASP.NET Core Logging |
File Caching FileCacheModule | Không | Response Caching Middleware |
HTTP Caching HttpCacheModule | Không | Response Caching Middleware |
HTTP Logging HttpLoggingModule | Có | ASP.NET Core Logging |
HTTP Redirection HttpRedirectionModule | Có | URL Rewriting Middleware |
HTTP Tracing TracingModule | Có | |
IIS Client Certificate Mapping Authentication IISCertificateMappingAuthenticationModule | Có | |
IP and Domain Restrictions IpRestrictionModule | Có | |
ISAPI Filters IsapiFilterModule | Có | Middleware |
ISAPI IsapiModule | Có | Middleware |
Protocol Support ProtocolSupportModule | Có | |
Request Filtering RequestFilteringModule | Có | URL Rewriting Middleware IRule |
Request Monitor RequestMonitorModule | Có | |
URL Rewriting† RewriteModule | Có | URL Rewriting Middleware |
Server-Side Includes ServerSideIncludeModule | Không | |
Static Compression StaticCompressionModule | Không | Response Compression Middleware |
Static Content StaticFileModule | Không | Static File Middleware |
Token Caching TokenCacheModule | Có | |
URI Caching UriCacheModule | Có | |
URL Authorization UrlAuthorizationModule | Có | ASP.NET Core Identity |
WebDav WebDAV | Không | |
Windows Authentication WindowsAuthenticationModule | Có |
†Các kiểu match isFile và isDirectory của URL Rewrite Module không hoạt động với các ứng dụng ASP.NET Core do các thay đổi trong cấu trúc thư mục.
Managed modules (module được quản lý)
Các managed module không hoạt động với các ứng dụng ASP.NET Core được host khi phiên bản .NET CLR của app pool được đặt thành No Managed Code. ASP.NET Core cung cấp các giải pháp middleware thay thế trong một số trường hợp.
| Module | Tùy chọn ASP.NET Core |
|---|---|
| AnonymousIdentification | |
| DefaultAuthentication | |
| FileAuthorization | |
| FormsAuthentication | Cookie Authentication Middleware |
| OutputCache | Response Caching Middleware |
| Profile | |
| RoleManager | |
| ScriptModule-4.0 | |
| Session | Session Middleware |
| UrlAuthorization | |
| UrlMappingsModule | URL Rewriting Middleware |
| UrlRoutingModule-4.0 | ASP.NET Core Identity |
| WindowsAuthentication |
Thay đổi ứng dụng trong IIS Manager
Khi sử dụng IIS Manager để cấu hình cài đặt, file web.config của ứng dụng sẽ bị thay đổi. Nếu triển khai ứng dụng và bao gồm web.config, bất kỳ thay đổi nào được thực hiện bằng IIS Manager sẽ bị ghi đè bởi file web.config đã triển khai. Nếu có thay đổi được thực hiện đối với file web.config của server, hãy sao chép ngay file web.config đã cập nhật trên server vào project cục bộ.
Vô hiệu hóa IIS modules
Nếu một IIS module được cấu hình ở cấp server mà cần vô hiệu hóa cho một ứng dụng, có thể thêm vào file web.config của ứng dụng để vô hiệu hóa module. Hoặc để module ở nguyên và hủy kích hoạt nó bằng cài đặt cấu hình (nếu có) hoặc xóa module khỏi ứng dụng.
Vô hiệu hóa module
Nhiều module cung cấp cài đặt cấu hình cho phép chúng bị vô hiệu hóa mà không cần xóa module khỏi ứng dụng. Đây là cách đơn giản và nhanh nhất để hủy kích hoạt module. Ví dụ, HTTP Redirection Module có thể bị vô hiệu hóa bằng phần tử <httpRedirect> trong web.config:
<configuration>
<system.webServer>
<httpRedirect enabled="false" />
</system.webServer>
</configuration>Để biết thêm thông tin về vô hiệu hóa module bằng cài đặt cấu hình, hãy theo các liên kết trong phần Child Elements của IIS <system.webServer>.
Xóa module
Nếu chọn xóa module bằng cài đặt trong web.config, trước tiên hãy mở khóa module và mở khóa phần <modules> của web.config:
- Mở khóa module ở cấp server. Chọn IIS server trong sidebar Connections của IIS Manager. Mở Modules trong khu vực IIS. Chọn module trong danh sách. Trong sidebar Actions bên phải, chọn Unlock. Nếu entry hành động cho module xuất hiện là Lock, module đã được mở khóa và không cần hành động nào. Mở khóa nhiều module nếu bạn dự định xóa chúng khỏi web.config.
- Triển khai ứng dụng không có phần
<modules>trong web.config. Nếu ứng dụng được triển khai với web.config chứa phần<modules>mà không có mở khóa phần đó trước trong IIS Manager, Configuration Manager sẽ báo lỗi khi cố gắng mở khóa phần đó. Do đó, hãy triển khai ứng dụng không có phần<modules>. - Mở khóa phần
<modules>của web.config. Trong sidebar Connections, chọn website trong Sites. Trong khu vực Management, mở Configuration Editor. Dùng các điều khiển điều hướng để chọn phầnsystem.webServer/modules. Trong sidebar Actions bên phải, chọn Unlock phần đó. - Thêm phần
<modules>vào file web.config cục bộ của ứng dụng với phần tử<remove>để xóa module khỏi ứng dụng. Thêm nhiều phần tử<remove>để xóa nhiều module. Nếu thay đổi web.config được thực hiện trên server, hãy ngay lập tức thực hiện các thay đổi tương tự cho file web.config của project cục bộ. Xóa module bằng cách này không ảnh hưởng đến việc sử dụng module với các ứng dụng khác trên server.
``xml <configuration> <system.webServer> <modules> <remove name="MODULE_NAME" /> </modules> </system.webServer> </configuration> ``
Để thêm hoặc xóa module cho IIS Express bằng web.config, hãy chỉnh sửa applicationHost.config để mở khóa phần <modules>:
- Mở {APPLICATION ROOT}\.vs\config\applicationhost.config.
- Tìm phần tử
<section>cho IIS module và thay đổioverrideModeDefaulttừDenythànhAllow:
``xml <section name="modules" allowDefinition="MachineToApplication" overrideModeDefault="Allow" /> ``
- Tìm phần
<location path="" overrideMode="Allow"><system.webServer><modules>. Đối với bất kỳ module nào bạn muốn xóa, hãy đặtlockItemtừtruethànhfalse. Trong ví dụ sau, CGI Module được mở khóa:
``xml <add name="CgiModule" lockItem="false" /> ``
- Sau khi phần
<modules>và các module riêng lẻ đã được mở khóa, bạn có thể thêm hoặc xóa IIS module bằng file web.config của ứng dụng để chạy ứng dụng trên IIS Express.
IIS module cũng có thể bị xóa bằng Appcmd.exe. Cung cấp MODULE_NAME và APPLICATION_NAME trong lệnh:
Appcmd.exe delete module MODULE_NAME /app.name:APPLICATION_NAME
Ví dụ, xóa DynamicCompressionModule khỏi Default Web Site:
%windir%\system32\inetsrv\appcmd.exe delete module DynamicCompressionModule /app.name:"Default Web Site"
Cấu hình module tối thiểu
Các module duy nhất cần thiết để chạy ứng dụng ASP.NET Core là Anonymous Authentication Module và ASP.NET Core Module.
URI Caching Module (UriCacheModule) cho phép IIS lưu cấu hình website ở cấp URL. Nếu không có module này, IIS phải đọc và phân tích cấu hình trên mỗi yêu cầu, ngay cả khi cùng một URL được yêu cầu nhiều lần. Phân tích cấu hình trên mỗi yêu cầu dẫn đến chi phí hiệu suất đáng kể. Mặc dù URI Caching Module không bắt buộc để một ứng dụng ASP.NET Core được host chạy, chúng tôi khuyên nên bật URI Caching Module cho tất cả deployment ASP.NET Core.
HTTP Caching Module (HttpCacheModule) triển khai IIS output cache và cả logic để lưu cache các item trong HTTP.sys cache. Nếu không có module này, nội dung không còn được cache trong kernel mode và các cache profile bị bỏ qua. Xóa HTTP Caching Module thường gây ra các tác động bất lợi đến hiệu suất và sử dụng tài nguyên. Mặc dù HTTP Caching Module không bắt buộc để một ứng dụng ASP.NET Core được host chạy, chúng tôi khuyên nên bật HTTP Caching Module cho tất cả deployment ASP.NET Core.