IIS 및 ASP.NET Core를 사용하는 Out of Process 호스팅

ASP.NET Core 앱은 IIS 작업자 프로세스와 별도의 프로세스에서 실행되므로 ASP.NET Core 모듈은 프로세스 관리를 수행합니다. 모듈은 첫 번째 요청이 들어올 때 ASP.NET Core 앱용 프로세스를 시작하고 종료되거나 충돌이 발생하면 앱을 다시 시작합니다. 이는 Windows Process Activation Service(WAS)로 관리되는 In-Process로 실행되는 앱에서 볼 수 있는 동작과 기본적으로 동일합니다.

다음 다이어그램은 IIS, ASP.NET Core 모듈 및 Out-of-Process에 호스트된 앱 간의 관계를 보여 줍니다.

ASP.NET Core Module in the out-of-process hosting scenario

  1. 요청은 웹에서 커널 모드 HTTP.sys 드라이버로 도착합니다.
  2. 드라이버는 웹 사이트의 구성된 포트에서 IIS로 요청을 라우팅합니다. 구성된 포트는 일반적으로 80(HTTP) 또는 443(HTTPS)입니다.
  3. 모듈은 앱의 임의의 포트에서 Kestrel으로 요청을 전달합니다. 임의 포트는 80 또는 443이 아닙니다.

ASP.NET Core 모듈은 시작 시 환경 변수를 통해 포트를 지정합니다. UseIISIntegration 확장은 http://localhost:{PORT}에서 수신하도록 서버를 구성합니다. 추가 검사가 수행되고 모듈에서 시작되지 않은 요청은 거부됩니다. 이 모듈은 HTTPS 전달을 지원하지 않습니다. HTTPS를 통해 IIS에서 수신하는 경우에도 요청은 HTTP를 통해 전달됩니다.

Kestrel이 모듈에서 요청을 선택한 후 요청은 ASP.NET Core 미들웨어 파이프라인으로 전달됩니다. 미들웨어 파이프라인은 요청을 처리하고 앱의 논리에 HttpContext 인스턴스로 전달합니다. IIS 통합에 의해 추가된 미들웨어는 체계, 원격 IP 및 PathBase를 Kestrel에 요청을 전달하기 위한 계정으로 업데이트합니다. 앱의 응답은 IIS로 다시 전달되고, 요청을 시작한 HTTP 클라이언트에 다시 전달됩니다.

ASP.NET Core 모듈 구성 지침은 IIS용 ANCM(ASP.NET Core 모듈)을 참조하세요.

호스팅에 대한 자세한 내용은 ASP.NET Core의 호스트를 참조하세요.

애플리케이션 구성

IISIntegration 구성 요소 사용

(Program.cs)에서 CreateHostBuilder 호스트를 빌드할 때 IIS 통합을 사용하도록 호출 CreateDefaultBuilder 합니다.

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

CreateDefaultBuilder에 대한 자세한 내용은 ASP.NET Core의 .NET 제네릭 호스트를 참조하세요.

Out-of-process 호스팅 모델

IIS 옵션을 구성하려면 IISOptions에 대한 서비스 구성을 ConfigureServices에 포함합니다. 다음 예에서는 앱이 HttpContext.Connection.ClientCertificate를 채우는 것을 방지합니다.

services.Configure<IISOptions>(options => 
{
    options.ForwardClientCertificate = false;
});
옵션 기본값 설정
AutomaticAuthentication true true이면 IIS 통합 미들웨어Windows 인증에 의해 인증된 HttpContext.User를 설정합니다. false이면 미들웨어가 HttpContext.User에게 ID만 제공하고, AuthenticationScheme에서 명시적으로 요청될 때 챌린지에 응답합니다. IIS에서 Windows 인증은 AutomaticAuthentication이 작동하기 위해 사용하도록 설정되어야 합니다. 자세한 내용은 Windows 인증 항목을 참조하세요.
AuthenticationDisplayName null 로그인 페이지에서 사용자에게 나타나는 표시 이름을 설정합니다.
ForwardClientCertificate true true면서 MS-ASPNETCORE-CLIENTCERT 요청 헤더가 있는 경우 HttpContext.Connection.ClientCertificate가 채워집니다.

프록시 서버 및 부하 분산 장치 시나리오

IIS 통합 미들웨어 및 ASP.NET Core 모듈은 다음을 전달하도록 구성되어 있습니다.

  • 체계(HTTP/HTTPS).
  • 요청이 시작된 원격 IP 주소입니다.

IIS 통합 미들웨어는 전달된 헤더 미들웨어를 구성합니다.

추가 프록시 서버 및 부하 분산 장치 외에도 호스팅되는 앱에 추가 구성이 필요할 수 있습니다. 자세한 내용은 프록시 서버 및 부하 분산 장치를 사용하도록 ASP.NET Core 구성을 참조하세요.

Out-of-process 호스팅 모델

Out-of-process 호스팅에 대한 앱을 구성하려면 속성 OutOfProcess 값을 <AspNetCoreHostingModel> 프로젝트 파일(.csproj)로 설정합니다.

<PropertyGroup>
  <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
</PropertyGroup>

In-Process 호스팅은 기본값 InProcess로 설정됩니다.

<AspNetCoreHostingModel>의 값은 대/소문자를 구분하지 않으므로 inprocessoutofprocess는 유효한 값입니다.

IIS HTTP 서버(IISHttpServer) 대신 Kestrel 서버가 사용됩니다.

Out of Process의 경우 CreateDefaultBuilderUseIISIntegration을 호출합니다.

  • ASP.NET Core 모듈 뒤에서 실행될 때 서버가 수신 대기해야 하는 포트 및 기본 경로를 구성합니다.
  • 시작 오류를 캡처하도록 호스트를 구성합니다.

프로세스 이름

Process.GetCurrentProcess().ProcessNamew3wp/iisexpress(In-Process) 또는 dotnet(Out-of-Process)을 보고합니다.

Windows 인증 등의 많은 네이티브 모듈이 활성 상태로 유지됩니다. ASP.NET Core 모듈과 함께 활성화된 IIS 모듈에 대한 자세한 내용은 IIS 모듈 및 ASP.NET Core를 참조하세요.

ASP.NET Core 모듈은 다음 작업을 수행할 수도 있습니다.

  • 작업자 프로세스의 환경 변수를 설정합니다.
  • 시작 문제를 해결하기 위해 stdout 출력을 파일 스토리지에 기록합니다.
  • Windows 인증 토큰을 전달합니다.