ASP.NET Core 모듈 소개Introduction to ASP.NET Core Module

Tom Dykstra, Rick Strahl, 및 Chris RossBy Tom Dykstra, Rick Strahl, and Chris Ross

ASP.NET Core 모듈 (ANCM)를 사용 하면 ASP.NET Core IIS 뒤에 있는 응용 프로그램을 실행 및 IIS를 사용 하 여 어떤 것이 좋습니다 (보안, 관리 효율성, 및에서 많은 자세한)에 대 한 Kestrel 어떤 것이 좋습니다 (빠른 않도록)에 대 한 시점과 기술에서 한 번에 모두 하면 도움이 됩니다.ASP.NET Core Module (ANCM) lets you run ASP.NET Core applications behind IIS, using IIS for what it's good at (security, manageability, and lots more) and using Kestrel for what it's good at (being really fast), and getting the benefits from both technologies at once. ANCM은 Kestrel; 에서만 작동 WebListener와 호환 되지 (ASP.NET Core에서 1.x) 또는 (2.x)에서 HTTP.sys 합니다.ANCM works only with Kestrel; it isn't compatible with WebListener (in ASP.NET Core 1.x) or HTTP.sys (in 2.x).

지원 되는 Windows 버전:Supported Windows versions:

  • Windows 7 및 Windows Server 2008 R2 이상Windows 7 and Windows Server 2008 R2 and later

샘플 코드 보기 또는 다운로드(다운로드 방법)View or download sample code (how to download)

ASP.NET Core 모듈에서 수행 하는 작업What ASP.NET Core Module does

ANCM은 IIS 파이프라인에 후크 및 ASP.NET Core 응용 프로그램 백 엔드 트래픽을 리디렉션하는 네이티브 IIS 모듈입니다.ANCM is a native IIS module that hooks into the IIS pipeline and redirects traffic to the backend ASP.NET Core application. Windows 인증과 같은 다른 대부분 모듈 여전히 실행 하는 기회를 가져옵니다.Most other modules, such as windows authentication, still get a chance to run. 요청에 대 한 처리기를 선택 하 고 응용 프로그램에 처리기 매핑이 정의 되어 ANCM 컨트롤에만 됩니다 web.config 파일입니다.ANCM only takes control when a handler is selected for the request, and handler mapping is defined in the application web.config file.

프로세스에서 실행 되는 ASP.NET Core 응용 프로그램을 IIS 작업자 프로세스에서 분리 하므로 ANCM도는 처리 관리.Because ASP.NET Core applications run in a process separate from the IIS worker process, ANCM also does process management. ANCM 첫 번째 요청 제공 하 고 충돌 했을 때 다시 시작 하는 경우 ASP.NET Core 응용 프로그램에 대 한 프로세스를 시작 합니다.ANCM starts the process for the ASP.NET Core application when the first request comes in and restarts it when it crashes. 이 기본적으로 동일한 동작 클래식 ASP.NET 응용 프로그램을 실행 하는 IIS에서 프로세스 및 WAS (Windows Activation Service)에 의해 관리 됩니다.This is essentially the same behavior as classic ASP.NET applications that run in-process in IIS and are managed by WAS (Windows Activation Service).

다음은 IIS, ANCM, 및 ASP.NET Core 응용 프로그램 간의 관계를 보여 주는 다이어그램입니다.Here's a diagram that illustrates the relationship between IIS, ANCM, and ASP.NET Core applications.

ASP.NET Core 모듈

요청는 웹에서 제공 및 기본 포트 (80) 또는 SSL 포트 (443)에 IIS로 라우팅하는 커널 모드 Http.Sys 드라이버에 도달 합니다.Requests come in from the Web and hit the kernel mode Http.Sys driver which routes them into IIS on the primary port (80) or SSL port (443). ANCM 포트는 80/443 하는 응용 프로그램에 대해 구성 된 HTTP 포트에서 ASP.NET Core 응용 프로그램에 요청을 전달 합니다.ANCM forwards the requests to the ASP.NET Core application on the HTTP port configured for the application, which is not port 80/443.

Kestrel은 ANCM에서 들어오는 트래픽을 수신 대기 합니다.Kestrel listens for traffic coming from ANCM. ANCM 시작 시 환경 변수를 통해 포트 지정 및 UseIISIntegration 에서 수신 하도록 서버를 구성 하는 메서드 http://localhost:{port}합니다.ANCM specifies the port via environment variable at startup, and the UseIISIntegration method configures the server to listen on http://localhost:{port}. ANCM에서가 아니라 요청을 거부 하도록 추가 확인 합니다.There are additional checks to reject requests not from ANCM. (ANCM 지원 하지 않습니다 HTTPS 전달 되므로 IIS에서 HTTPS를 통해 수신 하는 경우에 요청은 HTTP를 통해 전달 됩니다.)(ANCM does not support HTTPS forwarding, so requests are forwarded over HTTP even if received by IIS over HTTPS.)

Kestrel ANCM에서 요청을 선택 하 고 그런 다음 처리 하 고 변수로 전달 하는 ASP.NET Core 미들웨어 파이프라인 밀어넣습니다 HttpContext 인스턴스 응용 프로그램 논리를 합니다.Kestrel picks up requests from ANCM and pushes them into the ASP.NET Core middleware pipeline, which then handles them and passes them on as HttpContext instances to application logic. 응용 프로그램의 응답은 다음 IIS에서 요청을 시작한 HTTP 클라이언트에 다시 해당 되는 푸시로 다시 전달 됩니다.The application's responses are then passed back to IIS, which pushes them back out to the HTTP client that initiated the requests.

ANCM에 몇 가지 다른 기능도 있습니다.ANCM has a few other functions as well:

  • 환경 변수를 설정합니다.Sets environment variables.
  • 로그 stdout 파일 저장소에 출력 합니다.Logs stdout output to file storage.
  • Windows 인증 토큰을 전달합니다.Forwards Windows authentication tokens.

ANCM ASP.NET Core 응용 프로그램에서 사용 하는 방법How to use ANCM in ASP.NET Core apps

이 섹션에서는 IIS 서버 및 ASP.NET Core 응용 프로그램 설정에 대 한 프로세스의 개요를 제공 합니다.This section provides an overview of the process for setting up an IIS server and ASP.NET Core application. 자세한 내용은 참조 를 IIS에 게시합니다.For detailed instructions, see Publishing to IIS.

ANCM 설치Install ANCM

ASP.NET Core 모듈 설치 되어 있어야 IIS에서 서버 및 IIS Express에서 개발 컴퓨터의 합니다.The ASP.NET Core Module has to be installed in IIS on your servers and in IIS Express on your development machines. 서버, ANCM에 포함 되는 .NET 핵심 Windows Server 호스팅 번들합니다.For servers, ANCM is included in the .NET Core Windows Server Hosting bundle. 개발 컴퓨터에 대 한 Visual Studio 자동으로 설치 ANCM IIS 및 IIS Express에서 이미 컴퓨터에 설치 된 경우.For development machines, Visual Studio automatically installs ANCM in IIS Express, and in IIS if it is already installed on the machine.

IISIntegration NuGet 패키지 설치Install the IISIntegration NuGet package

Microsoft.AspNetCore.Server.IISIntegration 패키지 ASP.NET Core metapackages에 포함 됩니다 (Microsoft.AspNetCoreMicrosoft.AspNetCore.All ).The Microsoft.AspNetCore.Server.IISIntegration package is included in the ASP.NET Core metapackages (Microsoft.AspNetCore and Microsoft.AspNetCore.All). metapackages 중 하나를 사용 하지 않는 경우 설치 Microsoft.AspNetCore.Server.IISIntegration 별도로 합니다.If you don't use one of the metapackages, install Microsoft.AspNetCore.Server.IISIntegration separately. IISIntegration 패키지는 앱을 설정 하는 ANCM에 의해 브로드캐스팅 되는 환경 변수를 읽을 수 있는 상호 운용성 팩.The IISIntegration package is an interoperability pack that reads environment variables broadcast by ANCM to set up your app. 환경 변수에서 수신 하도록 포트 등의 구성 정보를 제공 합니다.The environment variables provide configuration information, such as the port to listen on.

UseIISIntegration 호출Call UseIISIntegration

UseIISIntegration 확장 메서드를 WebHostBuilder IIS 사용 실행 하면 자동으로 호출 됩니다.The UseIISIntegration extension method on WebHostBuilder is called automatically when you run with IIS.

ASP.NET Core metapackages 중 하나를 사용 하지 않는 하 고 설치 하지 않은 경우는 Microsoft.AspNetCore.Server.IISIntegration 패키지 하면 런타임 오류가 발생 합니다.If you aren't using one of the ASP.NET Core metapackages and haven't installed the Microsoft.AspNetCore.Server.IISIntegration package, you get a runtime error. 호출 하는 경우 UseIISIntegration 패키지가 설치 되지 않은 경우 컴파일 시간 오류가 발생 명시적으로 합니다.If you call UseIISIntegration explicitly, you get a compile time error if the package isn't installed.

UseIISIntegration 메서드가 찾습니다 ANCM 설정 하는 환경 변수 이므로 아니요 ops 발견 되지 않습니다.The UseIISIntegration method looks for environment variables that ANCM sets, and it no-ops if they aren't found. 이 문제는 개발 및 macOS 또는 Linux에 대 한 테스트 및 IIS를 실행 하는 서버에 배포와 같은 시나리오를 지원 합니다.This behavior facilitates scenarios like developing and testing on macOS or Linux and deploying to a server that runs IIS. MacOS 또는 Linux에서 실행 되는 동안 Kestrel 서버 역할을 웹; 하지만 응용 프로그램 IIS 환경에 배포 될 때 자동으로 사용 하 여 IIS 및 ANCM 합니다.While running on macOS or Linux, Kestrel acts as the web server; but when the app is deployed to the IIS environment, it automatically uses ANCM and IIS.

포트 바인딩 ANCM 다른 포트 바인딩을 재정의합니다ANCM port binding overrides other port bindings

ANCM 백 엔드 프로세스에 할당 하는 동적 포트를 생성 합니다.ANCM generates a dynamic port to assign to the back-end process. UseIISIntegration 메서드는이 동적 포트를 선택 하 고 Kestrel에서 수신 하도록 구성 http://locahost:{dynamicPort}/합니다.The UseIISIntegration method picks up this dynamic port and configures Kestrel to listen on http://locahost:{dynamicPort}/. 이 재정의에 대 한 호출 등의 다른 URL 구성을 UseUrls 또는 Kestrel의 수신 API합니다.This overrides other URL configurations, such as calls to UseUrls or Kestrel's Listen API. 따라서 호출할 필요가 없습니다 UseUrls 또는 Kestrel의 Listen API ANCM를 사용 하는 경우.Therefore, you don't need to call UseUrls or Kestrel's Listen API when you use ANCM. 호출 하면 UseUrls 또는 Listen, Kestrel IIS 없이 앱을 실행할 때 지정 하는 포트에서 수신 합니다.If you do call UseUrls or Listen, Kestrel listens on the port you specify when you run the app without IIS.

Web.config에서 ANCM 옵션을 구성 합니다.Configure ANCM options in Web.config

ASP.NET Core 모듈에 대 한 구성에 저장 됩니다는 Web.config 응용 프로그램의 루트 폴더에 있는 파일입니다.Configuration for the ASP.NET Core Module is stored in the Web.config file that is located in the application's root folder. 이 파일의 설정을 시작 명령 및 ASP.NET Core 응용 프로그램을 시작 하는 인수를 가리킵니다.Settings in this file point to the startup command and arguments that start your ASP.NET Core app. 샘플 Web.config 코드 및 구성 옵션에 대 한 지침에 대 한 참조 ASP.NET 핵심 모듈 구성 참조합니다.For sample Web.config code and guidance on configuration options, see ASP.NET Core Module Configuration Reference.

개발에서 IIS Express와 함께 실행 합니다.Run with IIS Express in development

IIS Express는 ASP.NET Core 템플릿에 정의 된 기본 프로필을 사용 하 여 Visual Studio에서 실행할 수 있습니다.IIS Express can be launched by Visual Studio using the default profile defined by the ASP.NET Core templates.

HTTP 프로토콜 및 페어링 토큰을 사용 하는 프록시 구성Proxy configuration uses HTTP protocol and a pairing token

ANCM와 Kestrel 사이 프록시는 HTTP 프로토콜을 사용 합니다.The proxy created between the ANCM and Kestrel uses the HTTP protocol. HTTP를 사용 하 여 성능 최적화 수행 되입니다 ANCM와 Kestrel 간의 트래픽을 루프백 주소에 네트워크 인터페이스 오프 합니다.Using HTTP is a performance optimization where the traffic between the ANCM and Kestrel takes place on a loopback address off of the network interface. ANCM 및 위치는 서버에서 분리에서 Kestrel 간 트래픽을 도청의 위험은 없습니다.There's no risk of eavesdropping the traffic between the ANCM and Kestrel from a location off of the server.

페어링 토큰은 Kestrel에서 받은 요청 IIS에서 프록시 했으며 다른 소스에서 제공 되지 않은 보장 하기 위해 사용 됩니다.A pairing token is used to guarantee that the requests received by Kestrel were proxied by IIS and didn't come from some other source. 페어링 토큰 생성 되어 환경 변수로 설정 (ASPNETCORE_TOKEN)는 ANCM 여 합니다.The pairing token is created and set into an environment variable (ASPNETCORE_TOKEN) by the ANCM. 페어링 토큰 헤더에 설정 됩니다 (MSAspNetCoreToken) 프록시 요청 마다.The pairing token is also set into a header (MSAspNetCoreToken) on every proxied request. IIS 미들웨어 검사 페어링 토큰 헤더 값에서 환경 변수 값이 일치 하는지 확인 하 고 수신한 요청 합니다.IIS Middleware checks each request it receives to confirm that the pairing token header value matches the environment variable value. 토큰 값을 일치 하지 않으면 요청이 기록 되 고 거부 합니다.If the token values are mismatched, the request is logged and rejected. 페어링 토큰 환경 변수와 ANCM와 Kestrel 간의 트래픽을 서버에서 분리 된 위치에서 액세스할 수 없습니다.The pairing token environment variable and the traffic between the ANCM and Kestrel aren't accessible from a location off of the server. 공격자는 페어링 토큰 값을 몰라도 IIS 미들웨어에서 검사를 무시 하는 요청을 전송할 수 없습니다.Without knowing the pairing token value, an attacker can't submit requests that bypass the check in the IIS Middleware.

다음 단계Next steps

자세한 내용은 다음 리소스를 참조하세요.For more information, see the following resources: