IIS 모듈 및 ASP.NET CoreIIS modules with ASP.NET Core

Luke Latham으로By Luke Latham

일부 네이티브 IIS 모듈과 모든 IIS 관리 모듈은 ASP.NET Core 앱에 대한 요청을 처리할 수 없습니다.Some of the native IIS modules and all of the IIS managed modules aren't able to process requests for ASP.NET Core apps. 대부분의 경우 ASP.NET Core는 IIS 네이티브 및 관리 모듈에서 처리되는 시나리오의 대안을 제공합니다.In many cases, ASP.NET Core offers an alternative to the scenarios addressed by IIS native and managed modules.

네이티브 모듈Native modules

이 표는 ASP.NET Core 앱 및 ASP.NET Core 모듈에서 작동하는 네이티브 IIS 모듈을 나타냅니다.The table indicates native IIS modules that are functional with ASP.NET Core apps and the ASP.NET Core Module.

ModuleModule ASP.NET Core 앱 기능Functional with ASP.NET Core apps ASP.NET Core 옵션ASP.NET Core Option
익명 인증Anonymous Authentication
AnonymousAuthenticationModule
Yes
기본 인증Basic Authentication
BasicAuthenticationModule
Yes
클라이언트 인증 매핑 인증Client Certification Mapping Authentication
CertificateMappingAuthenticationModule
Yes
CGICGI
CgiModule
아니요No
구성 유효성 검사Configuration Validation
ConfigurationValidationModule
Yes
HTTP 오류HTTP Errors
CustomErrorModule
아니요No 상태 코드 페이지 미들웨어Status Code Pages Middleware
사용자 지정 로깅Custom Logging
CustomLoggingModule
Yes
기본 문서Default Document
DefaultDocumentModule
아니요No 기본 파일 미들웨어Default Files Middleware
다이제스트 인증Digest Authentication
DigestAuthenticationModule
Yes
디렉터리 검색Directory Browsing
DirectoryListingModule
아니요No 디렉터리 검색 미들웨어Directory Browsing Middleware
동적 압축Dynamic Compression
DynamicCompressionModule
Yes 응답 압축 미들웨어Response Compression Middleware
추적Tracing
FailedRequestsTracingModule
Yes ASP.NET Core 로깅ASP.NET Core Logging
파일 캐싱File Caching
FileCacheModule
아니요No 응답 캐싱 미들웨어Response Caching Middleware
HTTP 캐싱HTTP Caching
HttpCacheModule
아니요No 응답 캐싱 미들웨어Response Caching Middleware
HTTP 로깅HTTP Logging
HttpLoggingModule
Yes ASP.NET Core 로깅ASP.NET Core Logging
HTTP 리디렉션HTTP Redirection
HttpRedirectionModule
Yes URL 재작성 미들웨어URL Rewriting Middleware
IIS 클라이언트 인증서 매핑 인증IIS Client Certificate Mapping Authentication
IISCertificateMappingAuthenticationModule
Yes
IP 및 도메인 제한IP and Domain Restrictions
IpRestrictionModule
Yes
ISAPI 필터ISAPI Filters
IsapiFilterModule
Yes 미들웨어Middleware
ISAPIISAPI
IsapiModule
Yes 미들웨어Middleware
프로토콜 지원Protocol Support
ProtocolSupportModule
Yes
요청 필터링Request Filtering
RequestFilteringModule
Yes URL 재작성 미들웨어IRuleURL Rewriting Middleware IRule
요청 모니터Request Monitor
RequestMonitorModule
Yes
URL 재작성URL Rewriting
RewriteModule
Yes URL 재작성 미들웨어URL Rewriting Middleware
서버 쪽 포함Server-Side Includes
ServerSideIncludeModule
아니요No
정적 압축Static Compression
StaticCompressionModule
아니요No 응답 압축 미들웨어Response Compression Middleware
정적 콘텐츠Static Content
StaticFileModule
아니요No 정적 파일 미들웨어Static File Middleware
토큰 캐싱Token Caching
TokenCacheModule
Yes
URI 캐싱URI Caching
UriCacheModule
Yes
URL 권한 부여URL Authorization
UrlAuthorizationModule
Yes ASP.NET Core IDASP.NET Core Identity
Windows 인증Windows Authentication
WindowsAuthenticationModule
Yes

†URL 재작성 모듈의 isFileisDirectory 일치 유형이 디렉터리 구조의 변경으로 인해 ASP.NET Core 앱에서 작동하지 않습니다.†The URL Rewrite Module's isFile and isDirectory match types don't work with ASP.NET Core apps due to the changes in directory structure.

관리 모듈Managed modules

앱 풀의 .NET CLR 버전이 관리 코드 없음으로 설정된 경우 관리 모듈은 호스트된 ASP.NET Core 앱에서 작동하지 ‘않습니다’.Managed modules are not functional with hosted ASP.NET Core apps when the app pool's .NET CLR version is set to No Managed Code. ASP.NET Core는 여러 경우에 미들웨어 대체 방법을 제공합니다.ASP.NET Core offers middleware alternatives in several cases.

ModuleModule ASP.NET Core 옵션ASP.NET Core Option
AnonymousIdentificationAnonymousIdentification
DefaultAuthenticationDefaultAuthentication
FileAuthorizationFileAuthorization
FormsAuthenticationFormsAuthentication 쿠키 인증 미들웨어Cookie Authentication Middleware
OutputCacheOutputCache 응답 캐싱 미들웨어Response Caching Middleware
프로필Profile
RoleManagerRoleManager
ScriptModule-4.0ScriptModule-4.0
세션Session 세션 미들웨어Session Middleware
UrlAuthorizationUrlAuthorization
UrlMappingsModuleUrlMappingsModule URL 재작성 미들웨어URL Rewriting Middleware
UrlRoutingModule-4.0UrlRoutingModule-4.0 ASP.NET Core IDASP.NET Core Identity
WindowsAuthenticationWindowsAuthentication

IIS 관리자 응용 프로그램 변경 내용IIS Manager application changes

IIS 관리자를 사용하여 설정을 구성하는 경우 앱의 web.config 파일이 변경됩니다.When using IIS Manager to configure settings, the web.config file of the app is changed. 앱을 배포하고 web.config를 포함하는 경우 IIS 관리자를 사용하여 변경한 모든 내용을 배포된 web.config 파일이 덮어씁니다.If deploying an app and including web.config, any changes made with IIS Manager are overwritten by the deployed web.config file. 서버의 web.config 파일을 변경하는 경우 서버의 업데이트된 web.config 파일을 로컬 프로젝트에 즉시 복사합니다.If changes are made to the server's web.config file, copy the updated web.config file on the server to the local project immediately.

IIS 모듈 사용 안 함Disabling IIS modules

IIS 모듈이 앱에 대해 사용되지 않아야 하는 서버 수준에서 구성된 경우 앱의 web.config 파일에 추가하여 모듈을 사용하지 않도록 설정할 수 있습니다.If an IIS module is configured at the server level that must be disabled for an app, an addition to the app's web.config file can disable the module. 모듈을 제자리에 두고 구성 설정(사용 가능한 경우)을 사용하여 모듈을 비활성화하거나 앱에서 모듈을 제거합니다.Either leave the module in place and deactivate it using a configuration setting (if available) or remove the module from the app.

모듈 비활성화Module deactivation

많은 모듈에서는 앱에서 모듈을 제거하지 않고도 사용하지 않도록 설정할 수 있는 구성 설정을 제공합니다.Many modules offer a configuration setting that allows them to be disabled without removing the module from the app. 이는 모듈을 비활성화하는 가장 간단하고 가장 빠른 방법입니다.This is the simplest and quickest way to deactivate a module. 예를 들어 HTTP 리디렉션 모듈은 web.config<httpRedirect> 요소로 사용하지 않도록 설정할 수 있습니다.For example, the HTTP Redirection Module can be disabled with the <httpRedirect> element in web.config:

<configuration>
  <system.webServer>
    <httpRedirect enabled="false" />
  </system.webServer>
</configuration>

구성 설정을 사용하여 모듈을 사용하지 않도록 설정하는 방법에 대한 자세한 내용은 IIS <system.webServer>의 ‘자식 요소’ 섹션에 있는 링크를 참조하세요.For more information on disabling modules with configuration settings, follow the links in the Child Elements section of IIS <system.webServer>.

모듈 제거Module removal

web.config에서 설정과 함께 모듈을 제거하도록 선택한 경우 먼저 모듈을 잠금 해제하고 web.config<modules> 섹션을 작금 해제합니다.If opting to remove a module with a setting in web.config, unlock the module and unlock the <modules> section of web.config first:

  1. 서버 수준에서 모듈의 잠금을 해제합니다.Unlock the module at the server level. IIS 관리자 연결 사이드바에서 IIS 서버를 선택합니다.Select the IIS server in the IIS Manager Connections sidebar. IIS 영역에서 모듈을 엽니다.Open the Modules in the IIS area. 목록에서 모듈을 선택합니다.Select the module in the list. 오른쪽의 작업 사이드바에서 잠금 해제를 선택합니다.In the Actions sidebar on the right, select Unlock. 나중에 web.config에서 제거하려고 계획한 만큼 모듈을 잠금 해제합니다.Unlock as many modules as you plan to remove from web.config later.

  2. web.config<modules> 섹션 없이 앱을 배포합니다. IIS 관리자에서 먼저 섹션을 잠금 해제하지 않고 <modules> 섹션이 포함된 web.config를 사용하여 앱을 배포하면 Configuration Manager에서 섹션을 잠금 해제하려고 할 때 예외가 throw됩니다.Deploy the app without a <modules> section in web.config. If an app is deployed with a web.config containing the <modules> section without having unlocked the section first in the IIS Manager, the Configuration Manager throws an exception when attempting to unlock the section. 따라서 <modules> 섹션 없이 앱을 배포합니다.Therefore, deploy the app without a <modules> section.

  3. web.config<modules> 섹션을 잠금 해제합니다. 연결 사이드바의 사이트에서 웹 사이트를 선택합니다.Unlock the <modules> section of web.config. In the Connections sidebar, select the website in Sites. 관리 영역에서 구성 편집기를 엽니다.In the Management area, open the Configuration Editor. 탐색 컨트롤을 사용하여 system.webServer/modules 섹션을 선택합니다.Use the navigation controls to select the system.webServer/modules section. 오른쪽의 작업 사이드바에서 섹션을 잠금 해제하도록 선택합니다.In the Actions sidebar on the right, select to Unlock the section.

  4. 이때 <modules> 섹션을 <remove> 요소가 포함된 web.config 파일에 추가하여 앱에서 모듈을 제거할 수 있습니다.At this point, a <modules> section can be added to the web.config file with a <remove> element to remove the module from the app. 여러 <remove> 요소를 추가하여 여러 모듈을 제거할 수 있습니다.Multiple <remove> elements can be added to remove multiple modules. 서버에서 web.config가 변경되면 로컬에서 프로젝트의 web.config 파일에 동일한 변경 내용이 즉시 적용됩니다.If web.config changes are made on the server, immediately make the same changes to the project's web.config file locally. 이 방법으로 모듈을 제거해도 서버의 다른 앱과 함께 모듈을 사용하는 데 영향을 주지 않습니다.Removing a module this way won't affect the use of the module with other apps on the server.

    <configuration>
     <system.webServer>
       <modules>
         <remove name="MODULE_NAME" />
       </modules>
     </system.webServer>
    </configuration>
    

IIS 모듈을 Appcmd.exe를 사용하여 제거할 수도 있습니다.An IIS module can also be removed with Appcmd.exe. 다음 명령에 MODULE_NAMEAPPLICATION_NAME을 제공합니다.Provide the MODULE_NAME and APPLICATION_NAME in the command:

Appcmd.exe delete module MODULE_NAME /app.name:APPLICATION_NAME

예를 들어 기본 웹 사이트에서 DynamicCompressionModule을 제거합니다.For example, remove the DynamicCompressionModule from the Default Web Site:

%windir%\system32\inetsrv\appcmd.exe delete module DynamicCompressionModule /app.name:"Default Web Site"

최소 모듈 구성Minimum module configuration

ASP.NET Core 앱을 실행하는 데 필요한 유일한 모듈은 익명 인증 모듈 및 ASP.NET Core 모듈입니다.The only modules required to run an ASP.NET Core app are the Anonymous Authentication Module and the ASP.NET Core Module.

URI 캐싱 모듈(UriCacheModule)을 통해 IIS가 URL 수준에서 웹 사이트 구성을 캐시할 수 있습니다.The URI Caching Module (UriCacheModule) allows IIS to cache website configuration at the URL level. 이 모듈이 없으면 동일한 URL이 반복적으로 요청되더라도 IIS는 요청될 때마다 구성을 읽고 구문 분석해야 합니다.Without this module, IIS must read and parse configuration on every request, even when the same URL is repeatedly requested. 요청될 때마다 구성을 구문 분석하면 성능이 크게 저하됩니다.Parsing the configuration every request results in a significant performance penalty. ‘URI 캐싱 모듈은 호스트된 ASP.NET Core 앱을 실행하는 데 꼭 필요하지는 않지만, 모든 ASP.NET Core 배포에 대해 URI 캐싱 모듈을 사용하도록 설정하는 것이 좋습니다.’Although the URI Caching Module isn't strictly required for a hosted ASP.NET Core app to run, we recommend that the URI Caching Module be enabled for all ASP.NET Core deployments.

HTTP 캐싱 모듈(HttpCacheModule)은 IIS 출력 캐시 및 HTTP.sys 캐시에 있는 항목을 캐시하기 위한 논리를 구현합니다.The HTTP Caching Module (HttpCacheModule) implements the IIS output cache and also the logic for caching items in the HTTP.sys cache. 이 모듈이 없으면 콘텐츠가 커널 모드에서 더 이상 캐시되지 않으며 캐시 프로필이 무시됩니다.Without this module, content is no longer cached in kernel mode, and cache profiles are ignored. 일반적으로 HTTP 캐싱 모듈을 제거하면 성능 및 리소스 사용에 부정적인 영향을 줍니다.Removing the HTTP Caching Module usually has adverse effects on performance and resource usage. ‘HTTP 캐싱 모듈은 호스트된 ASP.NET Core 앱을 실행하는 데 꼭 필요하지는 않지만, 모든 ASP.NET Core 배포에 대해 HTTP 캐싱 모듈을 사용하도록 설정하는 것이 좋습니다.’Although the HTTP Caching Module isn't strictly required for a hosted ASP.NET Core app to run, we recommend that the HTTP Caching Module be enabled for all ASP.NET Core deployments.

추가 자료Additional resources