IIS가 있는 Windows에서 ASP.NET Core 호스팅Host ASP.NET Core on Windows with IIS

IIS 서버에 ASP.NET Core 앱을 게시하는 방법에 대한 자습서 경험은 IIS에 ASP.NET Core 앱 게시을(를) 참조하세요.For a tutorial experience on publishing an ASP.NET Core app to an IIS server, see IIS에 ASP.NET Core 앱 게시.

.NET Core 호스팅 번들 설치Install the .NET Core Hosting Bundle

지원되는 운영 체제Supported operating systems

지원되는 운영 체제는 다음과 같습니다.The following operating systems are supported:

  • Windows 7 이상Windows 7 or later
  • Windows Server 2012 R2 이상Windows Server 2012 R2 or later

HTTP.sys 서버(이전의 WebListener)는 IIS를 사용하는 역방향 프록시 구성에서 작동하지 않습니다.HTTP.sys server (formerly called WebListener) doesn't work in a reverse proxy configuration with IIS. Kestrel 서버를 사용합니다.Use the Kestrel server.

Azure에서 호스트하는 방법에 대한 자세한 내용은 Azure App Service에 ASP.NET Core 앱 배포를 참조하세요.For information on hosting in Azure, see Azure App Service에 ASP.NET Core 앱 배포.

문제 해결 지침은 ASP.NET Core 프로젝트 문제 해결 및 디버깅을 참조하십시오.For troubleshooting guidance, see ASP.NET Core 프로젝트 문제 해결 및 디버깅.

지원되는 플랫폼Supported platforms

32비트(x86) 또는 64비트(x64) 배포용으로 게시된 앱이 지원됩니다.Apps published for 32-bit (x86) or 64-bit (x64) deployment are supported. 앱이 다음과 같은 경우가 아닌 한 32비트(x86) .NET Core SDK를 포함한 32비트 앱을 배포합니다.Deploy a 32-bit app with a 32-bit (x86) .NET Core SDK unless the app:

  • 64비트 앱에 사용할 수 있는 더 큰 가상 메모리 주소 공간이 필요합니다.Requires the larger virtual memory address space available to a 64-bit app.
  • 더 큰 IIS 스택 크기가 필요합니다.Requires the larger IIS stack size.
  • 64비트 네이티브 종속성이 있습니다.Has 64-bit native dependencies.

32비트(x86)용으로 게시된 앱은 해당 IIS 애플리케이션 풀에 대해 32비트를 사용하도록 설정해야 합니다.Apps published for 32-bit (x86) must have 32-bit enabled for their IIS Application Pools. 자세한 내용은 IIS 사이트 만들기 섹션을 참조하세요.For more information, see the Create the IIS site section.

64비트 앱을 게시하려면 64비트(x64) .NET Core SDK를 사용합니다.Use a 64-bit (x64) .NET Core SDK to publish a 64-bit app. 64비트 런타임이 호스트 시스템에 있어야 합니다.A 64-bit runtime must be present on the host system.

호스팅 모델Hosting models

In-Process 호스팅 모델In-process hosting model

In-Process 호스팅을 사용하면 ASP.NET Core 앱은 IIS 작업자 프로세스와 동일한 프로세스에서 실행됩니다.Using in-process hosting, an ASP.NET Core app runs in the same process as its IIS worker process. 요청이 나가는 네트워크 트래픽을 동일한 머신에 다시 반환하는 네트워크 인터페이스인 루프백 어댑터를 통해 프록시되지 않기 때문에 In-Process 호스팅이 Out-of-Process 호스팅보다 향상된 성능을 제공합니다.In-process hosting provides improved performance over out-of-process hosting because requests aren't proxied over the loopback adapter, a network interface that returns outgoing network traffic back to the same machine. IIS는 Windows Process Activation Service(WAS)를 사용하여 프로세스 관리를 처리합니다.IIS handles process management with the Windows Process Activation Service (WAS).

ASP.NET Core 모듈:The ASP.NET Core Module:

  • 앱 초기화를 수행합니다.Performs app initialization.
    • CoreCLR을 로드합니다.Loads the CoreCLR.
    • Program.Main.Calls Program.Main.
  • IIS 네이티브 요청의 수명을 처리합니다.Handles the lifetime of the IIS native request.

다음 다이어그램은 IIS, ASP.NET Core 모듈 및 In-Process에 호스트된 앱 간의 관계를 보여 줍니다.The following diagram illustrates the relationship between IIS, the ASP.NET Core Module, and an app hosted in-process:

In Process 호스팅 시나리오에서 ASP.NET Core 모듈

  1. 요청은 웹에서 커널 모드 HTTP.sys 드라이버로 도착합니다.A request arrives from the web to the kernel-mode HTTP.sys driver.
  2. 드라이버는 웹 사이트의 구성된 포트[일반적으로 80(HTTP) 또는 443(HTTPS)]에서 IIS로 네이티브 요청을 라우팅합니다.The driver routes the native request to IIS on the website's configured port, usually 80 (HTTP) or 443 (HTTPS).
  3. ASP.NET Core 모듈에서는 기본 요청을 수신하고 IIS HTTP Server(IISHttpServer)에 전달합니다.The ASP.NET Core Module receives the native request and passes it to IIS HTTP Server (IISHttpServer). IIS HTTP 서버는 네이티브 요청을 관리형 요청으로 변환하는 IIS의 In-process 서버를 구현한 것입니다.IIS HTTP Server is an in-process server implementation for IIS that converts the request from native to managed.

IIS HTTP 서버에서 요청을 처리한 후:After the IIS HTTP Server processes the request:

  1. 해당 요청은 ASP.NET Core 미들웨어 파이프라인으로 전송됩니다.The request is sent to the ASP.NET Core middleware pipeline.
  2. 미들웨어 파이프라인은 요청을 처리하고 앱의 논리에 HttpContext 인스턴스로 전달합니다.The middleware pipeline handles the request and passes it on as an HttpContext instance to the app's logic.
  3. 앱의 응답은 IIS HTTP 서버를 통해 IIS로 다시 전달됩니다.The app's response is passed back to IIS through IIS HTTP Server.
  4. IIS는 요청을 시작한 클라이언트에 응답을 보냅니다.IIS sends the response to the client that initiated the request.

In Process 호스팅은 기존 앱에 대해 옵트인(opt in)됩니다.In-process hosting is opt-in for existing apps. ASP.NET Core 웹 템플릿은 In Process 호스팅 모델을 사용합니다.The ASP.NET Core web templates use the in-process hosting model.

CreateDefaultBuilderUseIIS 메서드를 호출하여 CoreCLR을 부팅하고 IIS 작업자 프로세스(w3wp.exe 또는 iisexpress.exe) 내에서 앱을 호스트함으로써 IServer 인스턴스를 추가합니다.CreateDefaultBuilder adds an IServer instance by calling the UseIIS method to boot the CoreCLR and host the app inside of the IIS worker process (w3wp.exe or iisexpress.exe). 성능 테스트의 결과 .NET Core 앱 in-process를 호스팅하는 것이 앱 out-of-process 및 Kestrel에 대한 요청을 프록시하는 것보다 훨씬 높은 요청 처리량을 제공함을 나타냅니다.Performance tests indicate that hosting a .NET Core app in-process delivers significantly higher request throughput compared to hosting the app out-of-process and proxying requests to Kestrel.

단일 실행 파일로 게시된 앱은 In Process 호스팅 모델을 통해 로드할 수 없습니다.Apps published as a single file executable can't be loaded by the in-process hosting model.

Out-of-Process 호스팅 모델Out-of-process hosting model

ASP.NET Core 앱은 IIS 작업자 프로세스와 별도의 프로세스에서 실행되므로 ASP.NET Core 모듈은 프로세스 관리를 수행합니다.Because ASP.NET Core apps run in a process separate from the IIS worker process, the ASP.NET Core Module handles process management. 모듈은 첫 번째 요청이 들어올 때 ASP.NET Core 앱용 프로세스를 시작하고 종료되거나 충돌이 발생하면 앱을 다시 시작합니다.The module starts the process for the ASP.NET Core app when the first request arrives and restarts the app if it shuts down or crashes. 이는 Windows Process Activation Service(WAS)로 관리되는 In-Process로 실행되는 앱에서 볼 수 있는 동작과 기본적으로 동일합니다.This is essentially the same behavior as seen with apps that run in-process that are managed by the Windows Process Activation Service (WAS).

다음 다이어그램은 IIS, ASP.NET Core 모듈 및 Out-of-Process에 호스트된 앱 간의 관계를 보여 줍니다.The following diagram illustrates the relationship between IIS, the ASP.NET Core Module, and an app hosted out-of-process:

Out-of-Process 호스팅 시나리오에서 ASP.NET Core 모듈

  1. 요청은 웹에서 커널 모드 HTTP.sys 드라이버로 도착합니다.Requests arrive from the web to the kernel-mode HTTP.sys driver.
  2. 드라이버는 웹 사이트의 구성된 포트에서 IIS로 요청을 라우팅합니다.The driver routes the requests to IIS on the website's configured port. 구성된 포트는 일반적으로 80(HTTP) 또는 443(HTTPS)입니다.The configured port is usually 80 (HTTP) or 443 (HTTPS).
  3. 모듈은 앱의 임의의 포트에서 Kestrel로 요청을 전달합니다.The module forwards the requests to Kestrel on a random port for the app. 임의 포트는 80 또는 443이 아닙니다.The random port isn't 80 or 443.

ASP.NET Core 모듈은 시작 시 환경 변수를 통해 포트를 지정합니다.The ASP.NET Core Module specifies the port via an environment variable at startup. UseIISIntegration 확장은 http://localhost:{PORT}에서 수신하도록 서버를 구성합니다.The UseIISIntegration extension configures the server to listen on http://localhost:{PORT}. 추가 검사가 수행되고 모듈에서 시작되지 않은 요청은 거부됩니다.Additional checks are performed, and requests that don't originate from the module are rejected. 이 모듈은 HTTPS 전달을 지원하지 않습니다.The module doesn't support HTTPS forwarding. HTTPS를 통해 IIS에서 수신하는 경우에도 요청은 HTTP를 통해 전달됩니다.Requests are forwarded over HTTP even if received by IIS over HTTPS.

Kestrel이 모듈에서 요청을 선택한 후, 요청은 ASP.NET Core 미들웨어 파이프라인으로 전달됩니다.After Kestrel picks up the request from the module, the request is forwarded into the ASP.NET Core middleware pipeline. 미들웨어 파이프라인은 요청을 처리하고 앱의 논리에 HttpContext 인스턴스로 전달합니다.The middleware pipeline handles the request and passes it on as an HttpContext instance to the app's logic. IIS 통합에 의해 추가된 미들웨어는 체계, 원격 IP 및 경로 기준을 Kestrel에 요청을 전달하기 위한 계정으로 업데이트합니다.Middleware added by IIS Integration updates the scheme, remote IP, and pathbase to account for forwarding the request to Kestrel. 앱의 응답은 IIS로 다시 전달되고, 요청을 시작한 HTTP 클라이언트에 다시 전달됩니다.The app's response is passed back to IIS, which forwards it back to the HTTP client that initiated the request.

ASP.NET Core 모듈 구성 지침은 ASP.NET Core 모듈을 참조하세요.For ASP.NET Core Module configuration guidance, see ASP.NET Core 모듈.

호스팅에 대한 자세한 내용은 ASP.NET Core의 호스트를 참조하세요.For more information on hosting, see Host in ASP.NET Core.

애플리케이션 구성Application configuration

IISIntegration 구성 요소 사용Enable the IISIntegration components

CreateHostBuilder(Program.cs)에서 호스트를 빌드하는 경우 CreateDefaultBuilder를 호출하여 IIS 통합을 사용하도록 설정합니다.When building a host in CreateHostBuilder (Program.cs), call CreateDefaultBuilder to enable IIS integration:

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

CreateDefaultBuilder에 대한 자세한 내용은 .NET 일반 호스트를 참조하세요.For more information on CreateDefaultBuilder, see .NET 일반 호스트.

IIS 옵션IIS options

In-process 호스팅 모델In-process hosting model

IIS 서버 옵션을 구성하려면 IISServerOptions에 대한 서비스 구성을 ConfigureServices에 포함합니다.To configure IIS Server options, include a service configuration for IISServerOptions in ConfigureServices. 다음 예제에서는 AutomaticAuthentication을 사용하지 않도록 설정합니다.The following example disables AutomaticAuthentication:

services.Configure<IISServerOptions>(options => 
{
    options.AutomaticAuthentication = false;
});
옵션Option 기본값Default 설정Setting
AutomaticAuthentication true true인 경우 IIS 서버는 Windows 인증에 의해 인증된 HttpContext.User를 설정합니다.If true, IIS Server sets the HttpContext.User authenticated by Windows Authentication. false인 경우 서버는 HttpContext.User에 대한 ID만 제공하고, AuthenticationScheme에서 명시적으로 요청될 때 챌린지에 응답합니다.If false, the server only provides an identity for HttpContext.User and responds to challenges when explicitly requested by the AuthenticationScheme. IIS에서 Windows 인증은 AutomaticAuthentication이 작동하기 위해 사용하도록 설정되어야 합니다.Windows Authentication must be enabled in IIS for AutomaticAuthentication to function. 자세한 내용은 Windows 인증을 참조하세요.For more information, see Windows Authentication.
AuthenticationDisplayName null 로그인 페이지에서 사용자에게 나타나는 표시 이름을 설정합니다.Sets the display name shown to users on login pages.
AllowSynchronousIO false HttpContext.RequestHttpContext.Response에 대해 동기 I/O가 허용되는지 여부를 나타냅니다.Whether synchronous I/O is allowed for the HttpContext.Request and the HttpContext.Response.
MaxRequestBodySize 30000000 HttpRequest의 최대 요청 본문 크기를 가져오거나 설정합니다.Gets or sets the max request body size for the HttpRequest. IIS 자체에는 IISServerOptions에 설정된 MaxRequestBodySize 앞에 처리되는 maxAllowedContentLength 한도가 있습니다.Note that IIS itself has the limit maxAllowedContentLength which will be processed before the MaxRequestBodySize set in the IISServerOptions. MaxRequestBodySize를 변경해도 maxAllowedContentLength에 영향을 주지 않습니다.Changing the MaxRequestBodySize won't affect the maxAllowedContentLength. maxAllowedContentLength를 늘리려면 web.config에 항목을 추가하여 maxAllowedContentLength를 더 높은 값으로 설정합니다.To increase maxAllowedContentLength, add an entry in the web.config to set maxAllowedContentLength to a higher value. 자세한 내용은 구성을 참조하세요.For more details, see Configuration.

Out-of-process 호스팅 모델Out-of-process hosting model

IIS 옵션을 구성하려면 IISOptions에 대한 서비스 구성을 ConfigureServices에 포함합니다.To configure IIS options, include a service configuration for IISOptions in ConfigureServices. 다음 예에서는 앱이 HttpContext.Connection.ClientCertificate를 채우는 것을 방지합니다.The following example prevents the app from populating HttpContext.Connection.ClientCertificate:

services.Configure<IISOptions>(options => 
{
    options.ForwardClientCertificate = false;
});
옵션Option 기본값Default 설정Setting
AutomaticAuthentication true true이면 IIS 통합 미들웨어Windows 인증에 의해 인증된 HttpContext.User를 설정합니다.If true, IIS Integration Middleware sets the HttpContext.User authenticated by Windows Authentication. false이면 미들웨어가 HttpContext.User에게 ID만 제공하고, AuthenticationScheme에서 명시적으로 요청될 때 챌린지에 응답합니다.If false, the middleware only provides an identity for HttpContext.User and responds to challenges when explicitly requested by the AuthenticationScheme. IIS에서 Windows 인증은 AutomaticAuthentication이 작동하기 위해 사용하도록 설정되어야 합니다.Windows Authentication must be enabled in IIS for AutomaticAuthentication to function. 자세한 내용은 Windows 인증 항목을 참조하세요.For more information, see the Windows Authentication topic.
AuthenticationDisplayName null 로그인 페이지에서 사용자에게 나타나는 표시 이름을 설정합니다.Sets the display name shown to users on login pages.
ForwardClientCertificate true true면서 MS-ASPNETCORE-CLIENTCERT 요청 헤더가 있는 경우 HttpContext.Connection.ClientCertificate가 채워집니다.If true and the MS-ASPNETCORE-CLIENTCERT request header is present, the HttpContext.Connection.ClientCertificate is populated.

프록시 서버 및 부하 분산 장치 시나리오Proxy server and load balancer scenarios

IIS 통합 미들웨어 및 ASP.NET Core 모듈은 다음을 전달하도록 구성되어 있습니다.The IIS Integration Middleware and the ASP.NET Core Module are configured to forward the:

  • 체계(HTTP/HTTPS).Scheme (HTTP/HTTPS).
  • 요청이 시작된 원격 IP 주소입니다.Remote IP address where the request originated.

IIS 통합 미들웨어는 전달된 헤더 미들웨어를 구성합니다.The IIS Integration Middleware configures Forwarded Headers Middleware.

추가 프록시 서버 및 부하 분산 장치 외에도 호스팅되는 앱에 추가 구성이 필요할 수 있습니다.Additional configuration might be required for apps hosted behind additional proxy servers and load balancers. 자세한 내용은 프록시 서버 및 부하 분산 장치를 사용하도록 ASP.NET Core 구성을 참조하세요.For more information, see Configure ASP.NET Core to work with proxy servers and load balancers.

web.config 파일web.config file

web.config 파일은 ASP.NET Core 모듈을 구성합니다.The web.config file configures the ASP.NET Core Module. web.config 파일을 만들고, 변하고, 게시하는 작업은 프로젝트를 게시할 때 MSBuild 대상(_TransformWebConfig)에 의해 처리됩니다.Creating, transforming, and publishing the web.config file is handled by an MSBuild target (_TransformWebConfig) when the project is published. 이 대상은 웹 SDK 대상(Microsoft.NET.Sdk.Web)에 나타납니다.This target is present in the Web SDK targets (Microsoft.NET.Sdk.Web). SDK는 프로젝트 파일을 기반으로 해서 설정됩니다.The SDK is set at the top of the project file:

<Project Sdk="Microsoft.NET.Sdk.Web">

프로젝트에 web.config 파일이 없는 경우, ASP.NET Core 모듈을 구성하기 위해 올바른 processPath‘인수’ 로 파일이 생성되어 게시된 출력으로 이동됩니다.If a web.config file isn't present in the project, the file is created with the correct processPath and arguments to configure the ASP.NET Core Module and moved to published output.

프로젝트에 web.config 파일이 있는 경우, ASP.NET Core 모듈을 구성하기 위해 올바른 processPath인수로 파일이 변환되어 게시된 출력으로 이동됩니다.If a web.config file is present in the project, the file is transformed with the correct processPath and arguments to configure the ASP.NET Core Module and moved to published output. 변환은 이 파일의 IIS 구성 설정을 수정하지 않습니다.The transformation doesn't modify IIS configuration settings in the file.

web.config 파일은 활성 IIS 모듈을 제어하는 추가 IIS 구성 설정을 제공할 수 있습니다.The web.config file may provide additional IIS configuration settings that control active IIS modules. ASP.NET Core 앱을 사용하여 요청을 처리할 수 있는 IIS 모듈에 대한 자세한 내용은 IIS 모듈 항목을 참조하세요.For information on IIS modules that are capable of processing requests with ASP.NET Core apps, see the IIS modules topic.

웹 SDK가 web.config 파일을 변환하지 못하게 하려면 프로젝트 파일의 <IsTransformWebConfigDisabled> 속성을 사용합니다.To prevent the Web SDK from transforming the web.config file, use the <IsTransformWebConfigDisabled> property in the project file:

<PropertyGroup>
  <IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>

웹 SDK가 파일을 변환하지 않도록 설정하는 경우 개발자가 processPath인수를 수동으로 설정해야 합니다.When disabling the Web SDK from transforming the file, the processPath and arguments should be manually set by the developer. 자세한 내용은 ASP.NET Core 모듈를 참조하세요.For more information, see ASP.NET Core 모듈.

web.config 파일 위치web.config file location

ASP.NET Core 모듈을 올바르게 설정하려면 배포된 앱의 콘텐츠 루트 경로(일반적으로 앱 기본 경로)에 web.config 파일이 있어야 합니다.In order to set up the ASP.NET Core Module correctly, the web.config file must be present at the content root path (typically the app base path) of the deployed app. IIS에 제공되는 웹 사이트 실제 경로와 동일한 위치입니다.This is the same location as the website physical path provided to IIS. 웹 배포를 사용하여 여러 앱을 게시하도록 설정하려면 앱의 루트에 web.config 파일이 있어야 합니다.The web.config file is required at the root of the app to enable the publishing of multiple apps using Web Deploy.

중요한 파일은 <assembly>assembly>.runtimeconfig.json, <assembly>assembly>.xml(XML 문서 주석) 및 <assembly>assembly>.deps.json과 같은 앱의 실제 경로에 있습니다.Sensitive files exist on the app's physical path, such as <assembly>.runtimeconfig.json, <assembly>.xml (XML Documentation comments), and <assembly>.deps.json. web.config 파일이 있고 사이트가 정상적으로 시작되면 IIS는 요청되어도 이러한 중요한 파일을 제공하지 않습니다.When the web.config file is present and the site starts normally, IIS doesn't serve these sensitive files if they're requested. web.config 파일이 없거나, 이름이 잘못 지정되었거나, 정상적으로 시작되도록 사이트를 구성할 수 없는 경우 IIS에서 중요한 파일을 공개적으로 제공할 수도 있습니다.If the web.config file is missing, incorrectly named, or unable to configure the site for normal startup, IIS may serve sensitive files publicly.

web.config 파일이 항상 배포에 있어야 하며, 올바르게 이름이 지정되고, 정상적으로 시작되도록 사이트를 구성할 수 있어야 합니다. 프로덕션 배포에서 web.config 파일을 제거하지 마세요.The web.config file must be present in the deployment at all times, correctly named, and able to configure the site for normal start up. Never remove the web.config file from a production deployment.

web.config 변환Transform web.config

게시할 때 web.config를 변환해야 하는 경우 web.config 변환를 참조하세요.If you need to transform web.config on publish, see web.config 변환. 구성, 프로필 또는 환경을 기반으로 하는 환경 변수를 설정하려면 게시할 때 web.config를 변환해야 할 수도 있습니다.You might need to transform web.config on publish to set environment variables based on the configuration, profile, or environment.

IIS 구성IIS configuration

Windows Server 운영 체제Windows Server operating systems

웹 서버(IIS) 서버 역할을 사용하도록 설정하고 역할 서비스를 설정합니다.Enable the Web Server (IIS) server role and establish role services.

  1. 관리 메뉴 또는 서버 관리자의 링크를 통해 역할 및 기능 추가 마법사를 사용합니다.Use the Add Roles and Features wizard from the Manage menu or the link in Server Manager. 서버 역할 단계에서 웹 서버(IIS) 확인란을 선택합니다.On the Server Roles step, check the box for Web Server (IIS).

    서버 역할 선택 단계에서 선택된 웹 서버 IIS 역할

  2. 기능 단계 후에는 웹 서버(IIS)에 대한 역할 서비스 단계가 로드됩니다.After the Features step, the Role services step loads for Web Server (IIS). 원하는 IIS 역할 서비스를 선택하거나 제공된 기본 역할 서비스를 적용합니다.Select the IIS role services desired or accept the default role services provided.

    역할 서비스 선택 단계에서 선택된 기본 역할 서비스

    Windows 인증(선택 사항)Windows Authentication (Optional)
    Windows 인증을 사용하도록 설정하려면 웹 서버 > 보안 노드를 확장합니다.To enable Windows Authentication, expand the following nodes: Web Server > Security. Windows 인증 기능을 선택합니다.Select the Windows Authentication feature. 자세한 내용은 Windows 인증 <windowsAuthentication>Windows 인증 구성을 참조하세요.For more information, see Windows Authentication <windowsAuthentication> and Configure Windows authentication.

    WebSockets(선택 사항)WebSockets (Optional)
    WebSockets는 ASP.NET Core 1.1 이상에서 지원됩니다.WebSockets is supported with ASP.NET Core 1.1 or later. WebSocket을 사용하도록 설정하려면 웹 서버 > 애플리케이션 개발 노드를 확장합니다.To enable WebSockets, expand the following nodes: Web Server > Application Development. WebSocket 프로토콜 기능을 선택합니다.Select the WebSocket Protocol feature. 자세한 내용은 WebSocket을 참고하시기 바랍니다.For more information, see WebSockets.

  3. 확인 단계를 진행하여 웹 서버 역할 및 서비스를 설치합니다.Proceed through the Confirmation step to install the web server role and services. 웹 서버(IIS) 역할을 설치한 후에 서버/IIS를 다시 시작할 필요는 없습니다.A server/IIS restart isn't required after installing the Web Server (IIS) role.

Windows 데스크톱 운영 체제Windows desktop operating systems

IIS 관리 콘솔World Wide Web 서비스를 사용하도록 설정합니다.Enable the IIS Management Console and World Wide Web Services.

  1. 제어판 > 프로그램 > 프로그램 및 기능 > Windows 기능 사용/사용 안 함(화면 왼쪽)으로 차례로 이동합니다.Navigate to Control Panel > Programs > Programs and Features > Turn Windows features on or off (left side of the screen).

  2. 인터넷 정보 서비스 노드를 엽니다.Open the Internet Information Services node. 웹 관리 도구 노드를 엽니다.Open the Web Management Tools node.

  3. IIS 관리 콘솔 확인란을 선택합니다.Check the box for IIS Management Console.

  4. World Wide Web 서비스 확인란을 선택합니다.Check the box for World Wide Web Services.

  5. World Wide Web 서비스의 기본 기능을 그대로 사용하거나 IIS 기능을 사용자 지정합니다.Accept the default features for World Wide Web Services or customize the IIS features.

    Windows 인증(선택 사항)Windows Authentication (Optional)
    Windows 인증을 사용하도록 설정하려면 World Wide Web 서비스 > 보안 노드를 확장합니다.To enable Windows Authentication, expand the following nodes: World Wide Web Services > Security. Windows 인증 기능을 선택합니다.Select the Windows Authentication feature. 자세한 내용은 Windows 인증 <windowsAuthentication>Windows 인증 구성을 참조하세요.For more information, see Windows Authentication <windowsAuthentication> and Configure Windows authentication.

    WebSockets(선택 사항)WebSockets (Optional)
    WebSockets는 ASP.NET Core 1.1 이상에서 지원됩니다.WebSockets is supported with ASP.NET Core 1.1 or later. WebSocket을 사용하도록 설정하려면 World Wide Web 서비스 > 애플리케이션 개발 기능 노드를 확장합니다.To enable WebSockets, expand the following nodes: World Wide Web Services > Application Development Features. WebSocket 프로토콜 기능을 선택합니다.Select the WebSocket Protocol feature. 자세한 내용은 WebSocket을 참고하시기 바랍니다.For more information, see WebSockets.

  6. IIS 설치 시 다시 시작해야 하는 경우 시스템을 다시 시작합니다.If the IIS installation requires a restart, restart the system.

Windows 기능에서 선택된 IIS 관리 콘솔 및 World Wide Web 서비스

.NET Core 호스팅 번들 설치Install the .NET Core Hosting Bundle

호스팅 시스템에 .NET Core 호스팅 번들을 설치합니다.Install the .NET Core Hosting Bundle on the hosting system. 번들은 .NET Core 런타임, .NET Core 라이브러리 및 ASP.NET Core 모듈을 설치합니다.The bundle installs the .NET Core Runtime, .NET Core Library, and the ASP.NET Core Module. 이 모듈을 통해 ASP.NET Core 앱을 IIS 배후에서 실행할 수 있습니다.The module allows ASP.NET Core apps to run behind IIS.

중요

IIS 이전에 호스팅 번들이 설치된 경우 번들 설치를 복구해야 합니다.If the Hosting Bundle is installed before IIS, the bundle installation must be repaired. IIS를 설치한 후 호스팅 번들 설치 프로그램을 다시 실행합니다.Run the Hosting Bundle installer again after installing IIS.

.NET Core의 64비트(x64) 버전을 설치한 후 호스팅 번들이 설치된 경우 SDK가 누락된 것처럼 보일 수 있습니다( .NET Core SDK가 검색되지 않음).If the Hosting Bundle is installed after installing the 64-bit (x64) version of .NET Core, SDKs might appear to be missing (No .NET Core SDKs were detected). 이 문제를 해결 하려면 ASP.NET Core 프로젝트 문제 해결 및 디버깅을 참조합니다.To resolve the problem, see ASP.NET Core 프로젝트 문제 해결 및 디버깅.

직접 다운로드(현재 버전)Direct download (current version)

다음 링크를 사용하여 설치 관리자를 다운로드합니다.Download the installer using the following link:

현재 .NET Core 호스팅 번들 설치 관리자(직접 다운로드)Current .NET Core Hosting Bundle installer (direct download)

이전 버전의 설치 관리자Earlier versions of the installer

이전 버전의 설치 관리자를 가져오려면:To obtain an earlier version of the installer:

  1. .NET Core 다운로드 페이지로 이동합니다.Navigate to the Download .NET Core page.
  2. 원하는 .NET Core 버전을 선택합니다.Select the desired .NET Core version.
  3. 앱 실행 - 런타임 열에서 원하는 .NET Core 런타임 버전의 행을 찾습니다.In the Run apps - Runtime column, find the row of the .NET Core runtime version desired.
  4. 호스팅 번들 링크를 사용하여 설치 관리자를 다운로드합니다.Download the installer using the Hosting Bundle link.

경고

일부 설치 관리자는 EOL(수명 종료)에 도달한 릴리스 버전을 포함하고 Microsoft에서 더 이상 지원되지 않습니다.Some installers contain release versions that have reached their end of life (EOL) and are no longer supported by Microsoft. 자세한 내용은 지원 정책을 참조하세요.For more information, see the support policy.

호스팅 번들 설치Install the Hosting Bundle

  1. 서버에서 설치 관리자를 실행합니다.Run the installer on the server. 관리자 명령 셸에서 설치 관리자를 실행할 때 다음 매개 변수를 사용할 수 있습니다.The following parameters are available when running the installer from an administrator command shell:

    • OPT_NO_ANCM=1: ASP.NET Core 모듈 설치를 건너뜁니다.OPT_NO_ANCM=1: Skip installing the ASP.NET Core Module.
    • OPT_NO_RUNTIME=1: .NET Core 런타임 설치를 건너뜁니다.OPT_NO_RUNTIME=1: Skip installing the .NET Core runtime. 서버에서 SCD(자체 포함 배포)만 호스트하는 경우에 사용됩니다.Used when the server only hosts self-contained deployments (SCD).
    • OPT_NO_SHAREDFX=1: ASP.NET 공유 프레임워크(ASP.NET 런타임) 설치를 건너뜁니다.OPT_NO_SHAREDFX=1: Skip installing the ASP.NET Shared Framework (ASP.NET runtime). 서버에서 SCD(자체 포함 배포)만 호스트하는 경우에 사용됩니다.Used when the server only hosts self-contained deployments (SCD).
    • OPT_NO_X86=1: x86 런타임 설치를 건너뜁니다.OPT_NO_X86=1: Skip installing x86 runtimes. 32비트 앱을 호스팅하지 않음을 아는 경우 이 매개 변수를 사용합니다.Use this parameter when you know that you won't be hosting 32-bit apps. 향후 32비트와 64비트 앱을 모두 호스트할 수 있는 기회가 있는 경우 이 매개 변수를 사용하지 않고 두 런타임을 모두 설치합니다.If there's any chance that you will host both 32-bit and 64-bit apps in the future, don't use this parameter and install both runtimes.
    • OPT_NO_SHARED_CONFIG_CHECK=1: 공유 구성(applicationHost.config)이 IIS 설치와 동일한 머신에 있는 경우 IIS 공유 구성 사용 선택을 해제합니다.OPT_NO_SHARED_CONFIG_CHECK=1: Disable the check for using an IIS Shared Configuration when the shared configuration (applicationHost.config) is on the same machine as the IIS installation. ASP.NET Core 2.2 이상 호스팅 번들러 설치 관리자에 대해서만 사용할 수 있습니다.Only available for ASP.NET Core 2.2 or later Hosting Bundler installers. 자세한 내용은 ASP.NET Core 모듈를 참조하세요.For more information, see ASP.NET Core 모듈.
  2. 시스템을 다시 시작하거나 명령 셸에서 다음 명령을 실행합니다.Restart the system or execute the following commands in a command shell:

    net stop was /y
    net start w3svc
    

    IIS를 다시 시작하면 설치 관리자에서 변경된 시스템 PATH(환경 변수)의 내용이 수집됩니다.Restarting IIS picks up a change to the system PATH, which is an environment variable, made by the installer.

ASP.NET Core에서는 공유 프레임워크 패키지의 패치 릴리스에 대한 롤포워드 동작을 채택하지 않습니다.ASP.NET Core doesn't adopt roll-forward behavior for patch releases of shared framework packages. 새 호스팅 번들을 설치하여 공유 프레임워크를 업그레이드한 후, 시스템을 다시 시작하거나 명령 셸에서 다음 명령을 실행합니다.After upgrading the shared framework by installing a new hosting bundle, restart the system or execute the following commands in a command shell:

net stop was /y
net start w3svc

참고

IIS 공유 구성에 대한 자세한 내용은 IIS 공유 구성을 사용하는 ASP.NET Core 모듈을 참조하세요.For information on IIS Shared Configuration, see ASP.NET Core Module with IIS Shared Configuration.

Visual Studio을 사용하여 게시할 때 웹 배포 설치Install Web Deploy when publishing with Visual Studio

웹 배포를 사용하여 앱을 서버에 배포하는 경우 최신 버전의 웹 배포를 서버에 설치합니다.When deploying apps to servers with Web Deploy, install the latest version of Web Deploy on the server. 웹 배포를 설치하려면 WebPI(웹 플랫폼 설치 관리자)를 사용하거나 Microsoft 다운로드 센터에서 직접 설치 관리자를 가져옵니다.To install Web Deploy, use the Web Platform Installer (WebPI) or obtain an installer directly from the Microsoft Download Center. WebPI를 사용하는 것이 좋습니다.The preferred method is to use WebPI. WebPI는 호스팅 공급자에 대한 독립 실행형 설치 및 구성을 제공합니다.WebPI offers a standalone setup and a configuration for hosting providers.

IIS 사이트 만들기Create the IIS site

  1. 호스팅 시스템에서 앱의 게시된 폴더 및 파일을 포함할 폴더를 만듭니다.On the hosting system, create a folder to contain the app's published folders and files. 다음 단계에서는 폴더의 경로가 앱의 실제 경로로 IIS에 제공됩니다.In a following step, the folder's path is provided to IIS as the physical path to the app. 앱의 배포 폴더 및 파일 레이아웃에 대한 자세한 내용은 ASP.NET Core 디렉터리 구조를 참조하세요.For more information on an app's deployment folder and file layout, see ASP.NET Core 디렉터리 구조.

  2. IIS 관리자의 연결 패널에서 서버 노드를 엽니다.In IIS Manager, open the server's node in the Connections panel. 사이트 폴더를 마우스 오른쪽 단추로 클릭합니다.Right-click the Sites folder. 상황에 맞는 메뉴에서 웹 사이트 추가를 선택합니다.Select Add Website from the contextual menu.

  3. 사이트 이름을 제공하고 실제 경로를 앱의 배포 폴더로 설정합니다.Provide a Site name and set the Physical path to the app's deployment folder. 바인딩 구성을 제공하고 확인을 선택하여 웹 사이트를 만듭니다.Provide the Binding configuration and create the website by selecting OK:

    [웹 사이트 추가] 단계에서 사이트 이름, 실제 경로 및 호스트 이름을 제공합니다.

    경고

    최상위 와일드카드 바인딩(http://*:80/http://+:80)을 사용하지 않아야 합니다.Top-level wildcard bindings (http://*:80/ and http://+:80) should not be used. 최상위 와일드카드 바인딩은 보안 취약점에 앱을 노출시킬 수 있습니다.Top-level wildcard bindings can open up your app to security vulnerabilities. 강력한 와일드카드와 약한 와일드카드 모두에 적용됩니다.This applies to both strong and weak wildcards. 와일드카드보다는 명시적 호스트 이름을 사용합니다.Use explicit host names rather than wildcards. 전체 부모 도메인을 제어하는 경우 하위 도메인 와일드카드 바인딩(예: *.mysub.com)에는 이러한 보안 위험이 없습니다(취약한 *.com과 반대임).Subdomain wildcard binding (for example, *.mysub.com) doesn't have this security risk if you control the entire parent domain (as opposed to *.com, which is vulnerable). 자세한 내용은 rfc7230 섹션-5.4를 참조하세요.See rfc7230 section-5.4 for more information.

  4. 서버 노드에서 애플리케이션 풀을 선택합니다.Under the server's node, select Application Pools.

  5. 사이트의 앱 풀을 마우스 오른쪽 단추로 클릭하고 상황에 맞는 메뉴에서 기본 설정을 선택합니다.Right-click the site's app pool and select Basic Settings from the contextual menu.

  6. 애플리케이션 풀 편집 창에서 .NET CLR 버전관리 코드 없음으로 설정합니다.In the Edit Application Pool window, set the .NET CLR version to No Managed Code:

    .NET CLR 버전에 대해 관리 코드 없음 설정

    ASP.NET Core는 별도의 프로세스에서 실행되며 런타임을 관리합니다.ASP.NET Core runs in a separate process and manages the runtime. ASP.NET Core에서는 데스크톱 CLR(.NET CLR)을 로드할 필요가 없습니다.ASP.NET Core doesn't rely on loading the desktop CLR (.NET CLR). .NET Core에 대한 CoreCLR(Core 공용 언어 런타임)이 부팅되어 작업자 프로세스의 앱을 호스트합니다.The Core Common Language Runtime (CoreCLR) for .NET Core is booted to host the app in the worker process. .NET CLR 버전관리 코드 없음으로 설정하는 것은 선택 사항이지만 권장됩니다.Setting the .NET CLR version to No Managed Code is optional but recommended.

  7. ASP.NET Core 2.2 이상:ASP.NET Core 2.2 or later:

    • In-Process 호스팅 모델을 사용하는 32비트 SDK로 게시된 32비트(x86) 자체 포함된 배포의 경우 32비트의 애플리케이션 풀을 사용하도록 설정합니다.For a 32-bit (x86) self-contained deployment published with a 32-bit SDK that uses the in-process hosting model, enable the Application Pool for 32-bit. IIS 관리자에서 연결 사이드바의 애플리케이션 풀로 이동합니다.In IIS Manager, navigate to Application Pools in the Connections sidebar. 앱의 애플리케이션 풀을 선택합니다.Select the app's Application Pool. 작업 사이드바에서 고급 설정을 선택합니다.In the Actions sidebar, select Advanced Settings. 32비트 애플리케이션 사용True로 설정합니다.Set Enable 32-Bit Applications to True.

    • In-process 호스팅 모델을 사용하는 64비트(x64) 자체 포함된 배포의 경우 32비트(x86) 프로세스에 대해 앱 풀을 사용하지 않도록 설정합니다.For a 64-bit (x64) self-contained deployment that uses the in-process hosting model, disable the app pool for 32-bit (x86) processes. IIS 관리자에서 연결 사이드바의 애플리케이션 풀로 이동합니다.In IIS Manager, navigate to Application Pools in the Connections sidebar. 앱의 애플리케이션 풀을 선택합니다.Select the app's Application Pool. 작업 사이드바에서 고급 설정을 선택합니다.In the Actions sidebar, select Advanced Settings. 32비트 애플리케이션 사용False로 설정합니다.Set Enable 32-Bit Applications to False.

  8. 프로세스 모델 ID에 적절한 권한이 있는지 확인합니다.Confirm the process model identity has the proper permissions.

    애플리케이션 풀의 기본 ID(프로세스 모델 > Identity )가 ApplicationPoolIdentity 에서 다른 ID로 변경되면, 새 ID에 앱의 폴더, 데이터베이스 및 기타 필요한 리소스에 액세스하는 데 필요한 권한이 있는지 확인합니다.If the default identity of the app pool (Process Model > Identity) is changed from ApplicationPoolIdentity to another identity, verify that the new identity has the required permissions to access the app's folder, database, and other required resources. 예를 들어 앱 풀에는 앱이 파일을 읽고 쓰는 폴더에 대한 읽기 및 쓰기 권한이 필요합니다.For example, the app pool requires read and write access to folders where the app reads and writes files.

Windows 인증 구성(선택 사항)Windows Authentication configuration (Optional)
자세한 내용은 Windows 인증 구성을 참조하세요.For more information, see Configure Windows authentication.

앱 배포Deploy the app

IIS 사이트 만들기 섹션에서 설정한 IIS 실제 경로 폴더에 앱을 배포합니다.Deploy the app to the IIS Physical path folder that was established in the Create the IIS site section. 웹 배포는 배포를 위해 권장되는 메커니즘이지만, 프로젝트의 게시 폴더에서 호스팅 시스템의 배포 폴더로 앱을 이동하기 위한 옵션에는 여러 가지가 있습니다.Web Deploy is the recommended mechanism for deployment, but several options exist for moving the app from the project's publish folder to the hosting system's deployment folder.

Visual Studio를 사용한 웹 배포Web Deploy with Visual Studio

웹 배포에서 사용할 게시 프로필을 만드는 방법은 ASP.NET Core 앱 배포용 Visual Studio 게시 프로필 항목을 참조하세요.See the Visual Studio publish profiles for ASP.NET Core app deployment topic to learn how to create a publish profile for use with Web Deploy. 호스팅 공급자가 게시 프로필을 제공하거나 게시 프로필을 만들 수 있도록 지원하는 경우 해당 프로필을 다운로드하고 Visual Studio 게시 대화 상자를 사용하여 가져옵니다.If the hosting provider provides a Publish Profile or support for creating one, download their profile and import it using the Visual Studio Publish dialog:

게시 대화 상자 페이지

Visual Studio 외부에서 웹 배포Web Deploy outside of Visual Studio

웹 배포는 Visual Studio 외부에서 명령줄을 통해 사용할 수도 있습니다.Web Deploy can also be used outside of Visual Studio from the command line. 자세한 내용은 웹 배포 도구를 참조하세요.For more information, see Web Deployment Tool.

웹 배포에 대한 대안Alternatives to Web Deploy

수동 복사, Xcopy, Robocopy, PowerShell 등의 여러 방법 중 하나를 사용하여 앱을 호스팅 시스템으로 이동합니다.Use any of several methods to move the app to the hosting system, such as manual copy, Xcopy, Robocopy, or PowerShell.

IIS에 ASP.NET Core 배포에 대한 자세한 내용은 IIS 관리자를 위한 배포 리소스 섹션을 참조하세요.For more information on ASP.NET Core deployment to IIS, see the Deployment resources for IIS administrators section.

웹 사이트 찾아보기Browse the website

앱이 호스팅 시스템에 배포된 후 앱의 공용 엔드포인트 중 하나에 요청합니다.After the app is deployed to the hosting system, make a request to one of the app's public endpoints.

다음 예제에서는 포트 80에서 사이트가 www.mysite.com의 IIS 호스트 이름에 바인딩됩니다.In the following example, the site is bound to an IIS Host name of www.mysite.com on Port 80. http://www.mysite.com에 대해 요청이 이루어졌습니다.A request is made to http://www.mysite.com:

IIS 시작 페이지가 로드된 Microsoft Edge 브라우저

배포 파일이 잠겨 있음Locked deployment files

앱이 실행 중이면 배포 폴더의 파일이 잠겨 있습니다.Files in the deployment folder are locked when the app is running. 잠긴 파일은 배포 중에 덮어쓸 수 없습니다.Locked files can't be overwritten during deployment. 배포에서 잠긴 파일을 해제하려면 다음 방법 중 하나를 사용하여 앱 풀을 중지합니다.To release locked files in a deployment, stop the app pool using one of the following approaches:

  • 웹 배포를 사용하고 프로젝트 파일에서 Microsoft.NET.Sdk.Web을 참조합니다.Use Web Deploy and reference Microsoft.NET.Sdk.Web in the project file. app_offline.htm 파일은 웹앱 디렉터리의 루트에 배치됩니다.An app_offline.htm file is placed at the root of the web app directory. 파일이 있는 경우 ASP.NET Core 모듈은 앱을 정상적으로 종료하고, 배포하는 동안 app_offline.htm 파일을 제공합니다.When the file is present, the ASP.NET Core Module gracefully shuts down the app and serves the app_offline.htm file during the deployment. 자세한 내용은 ASP.NET Core 모듈 구성 참조를 참조하세요.For more information, see the ASP.NET Core Module configuration reference.

  • 서버의 IIS 관리자에서 앱 풀을 수동으로 중지합니다.Manually stop the app pool in the IIS Manager on the server.

  • PowerShell을 사용하여 app_offline.htm을 삭제합니다(PowerShell 5 이상 필요).Use PowerShell to drop app_offline.htm (requires PowerShell 5 or later):

    $pathToApp = 'PATH_TO_APP'
    
    # Stop the AppPool
    New-Item -Path $pathToApp app_offline.htm
    
    # Provide script commands here to deploy the app
    
    # Restart the AppPool
    Remove-Item -Path $pathToApp app_offline.htm
    
    

데이터 보호Data protection

ASP.NET Core 데이터 보호 스택은 인증에 사용되는 미들웨어를 포함하여 여러 ASP.NET Core 미들웨어에서 사용됩니다.The ASP.NET Core Data Protection stack is used by several ASP.NET Core middlewares, including middleware used in authentication. 사용자 코드에서 데이터 보호 API가 호출되지 않더라도 배포 스크립트 또는 사용자 코드를 통해 영구적 암호화 키 저장소를 만들도록 데이터 보호를 구성해야 합니다.Even if Data Protection APIs aren't called by user code, data protection should be configured with a deployment script or in user code to create a persistent cryptographic key store. 데이터 보호를 구성하지 않으면 키는 메모리에 보관되고 앱이 다시 시작되면 삭제됩니다.If data protection isn't configured, the keys are held in memory and discarded when the app restarts.

키 링이 메모리에 저장된 경우 앱을 다시 시작하면 다음과 같이 됩니다.If the key ring is stored in memory when the app restarts:

  • 모든 cookie 기반 인증 토큰이 무효화됩니다.All cookie-based authentication tokens are invalidated.
  • 사용자는 다음 요청에서 다시 로그인해야 합니다.Users are required to sign in again on their next request.
  • 키 링으로 보호된 데이터의 암호를 더 이상 해독할 수 없습니다.Any data protected with the key ring can no longer be decrypted. 여기에는 CSRF 토큰ASP.NET Core MVC TempData cookie가 포함될 수 있습니다.This may include CSRF tokens and ASP.NET Core MVC TempData cookies.

IIS에서 키 링을 저장하도록 데이터 보호를 구성하려면 다음 방법 중 하나를 사용합니다.To configure data protection under IIS to persist the key ring, use one of the following approaches:

  • 데이터 보호 레지스트리키 만들기Create Data Protection Registry Keys

    ASP.NET 앱에서 사용되는 데이터 보호 키는 앱 외부의 레지스트리에 저장됩니다.Data protection keys used by ASP.NET Core apps are stored in the registry external to the apps. 지정된 앱의 키를 저장하려면 앱 풀에 대한 레지스트리 키를 만듭니다.To persist the keys for a given app, create registry keys for the app pool.

    WebFarm이 아닌 독립 실행형 IIS 설치의 경우 Data Protection Provision-AutoGenKeys.ps1 PowerShell 스크립트를 ASP.NET Core 앱과 함께 사용되는 각 응용 프로그램 풀에 사용할 수 있습니다.For standalone, non-webfarm IIS installations, the Data Protection Provision-AutoGenKeys.ps1 PowerShell script can be used for each app pool used with an ASP.NET Core app. 이 스크립트는 앱의 앱 풀 작업자 프로세스 계정만 액세스할 수 있는 HKLM 레지스트리에 레지스트리 키를 만듭니다.This script creates a registry key in the HKLM registry that's accessible only to the worker process account of the app's app pool. 미사용 키는 컴퓨터 전체 키가 있는 DPAPI를 사용하여 암호화됩니다.Keys are encrypted at rest using DPAPI with a machine-wide key.

    웹 팜 시나리오에서는 UNC 경로를 사용하여 데이터 보호 키 링을 저장하도록 앱을 구성할 수 있습니다.In web farm scenarios, an app can be configured to use a UNC path to store its data protection key ring. 기본적으로 데이터 보호 키는 암호화되지 않습니다.By default, the data protection keys aren't encrypted. 네트워크 공유에 대한 파일 권한은 앱 실행에 사용되는 Windows 계정으로 제한되어야 합니다.Ensure that the file permissions for the network share are limited to the Windows account the app runs under. X509 인증서를 사용하여 미사용 키를 보호할 수도 있습니다.An X509 certificate can be used to protect keys at rest. 사용자가 인증서를 업로드할 수 있는 메커니즘을 사용하는 것이 좋습니다. 즉, 사용자의 신뢰할 수 있는 인증서 저장소에 인증서를 배치하고, 사용자의 앱이 실행되는 모든 머신에서 이 인증서를 사용할 수 있도록 합니다.Consider a mechanism to allow users to upload certificates: Place certificates into the user's trusted certificate store and ensure they're available on all machines where the user's app runs. 자세한 내용은 ASP.NET Core 데이터 보호 구성을 참조하세요.See Configure ASP.NET Core Data Protection for details.

  • 사용자 프로필을 로드하도록 IIS 애플리케이션 풀 구성Configure the IIS Application Pool to load the user profile

    이 설정은 앱 풀에 대한 고급 설정 아래의 프로세스 모델 섹션에 있습니다.This setting is in the Process Model section under the Advanced Settings for the app pool. 사용자 프로필True로 설정합니다.Set Load User Profile to True. True로 설정하면 키가 사용자 프로필 디렉터리에 저장되고, 사용자 계정에 관련된 키가 있는 DPAPI를 사용하여 보호됩니다.When set to True, keys are stored in the user profile directory and protected using DPAPI with a key specific to the user account. 키는 %LOCALAPPDATA%/ASP.NET/DataProtection-Keys 폴더에 저장됩니다.Keys are persisted to the %LOCALAPPDATA%/ASP.NET/DataProtection-Keys folder.

    앱 풀의 setProfileEnvironment 특성도 사용하도록 설정해야 합니다.The app pool's setProfileEnvironment attribute must also be enabled. setProfileEnvironment 의 기본값은 true입니다.The default value of setProfileEnvironment is true. Windows OS와 같은 일부 시나리오에서는 setProfileEnvironmentfalse로 설정됩니다.In some scenarios (for example, Windows OS), setProfileEnvironment is set to false. 키가 예상대로 사용자 프로필 디렉터리에 저장되지 않는 경우 다음을 수행합니다.If keys aren't stored in the user profile directory as expected:

    1. %windir%/system32/inetsrv/config 폴더로 이동합니다.Navigate to the %windir%/system32/inetsrv/config folder.
    2. applicationHost.config 파일을 엽니다.Open the applicationHost.config file.
    3. <system.applicationHost><applicationPools><applicationPoolDefaults><processModel> 요소를 찾습니다.Locate the <system.applicationHost><applicationPools><applicationPoolDefaults><processModel> element.
    4. setProfileEnvironment 특성이 존재하지 않는지 확인합니다. 존재하지 않을 경우 기본값이 true로 설정됩니다. 또는 특성 값을 명시적으로 true로 설정합니다.Confirm that the setProfileEnvironment attribute isn't present, which defaults the value to true, or explicitly set the attribute's value to true.
  • 파일 시스템을 키 링 저장소로 사용Use the file system as a key ring store

    파일 시스템을 키 링 저장소로 사용하도록 앱 코드를 조정합니다.Adjust the app code to use the file system as a key ring store. X509 인증서를 사용하여 키 링을 보호하고 신뢰할 수 있는 인증서인지 확인합니다.Use an X509 certificate to protect the key ring and ensure the certificate is a trusted certificate. 자체 서명된 인증서인 경우 신뢰할 수 있는 루트 저장소에 배치합니다.If the certificate is self-signed, place the certificate in the Trusted Root store.

    웹 팜에서 IIS를 사용하는 경우 다음을 수행합니다.When using IIS in a web farm:

    • 모든 컴퓨터에서 액세스할 수 있는 파일 공유를 사용합니다.Use a file share that all machines can access.
    • 각 시스템에 X509 인증서를 배포합니다.Deploy an X509 certificate to each machine. 코드에 데이터 보호를 구성합니다.Configure data protection in code.
  • 데이터 보호에 대한 컴퓨터 수준 정책 설정Set a machine-wide policy for data protection

    데이터 보호 시스템은 데이터 보호 API를 사용하는 모든 앱에 대한 기본 컴퓨터 수준 정책 설정을 제한적으로 지원합니다.The data protection system has limited support for setting a default machine-wide policy for all apps that consume the Data Protection APIs. 자세한 내용은 ASP.NET Core 데이터 보호를 참조하세요.For more information, see ASP.NET Core 데이터 보호.

가상 디렉터리Virtual Directories

IIS 가상 디렉터리는 ASP.NET Core 앱에서 지원되지 않습니다.IIS Virtual Directories aren't supported with ASP.NET Core apps. 앱은 하위 애플리케이션으로 호스팅될 수 있습니다.An app can be hosted as a sub-application.

하위 애플리케이션Sub-applications

ASP.NET Core 앱은 IIS 하위 애플리케이션(하위 앱)으로 호스팅될 수 있습니다.An ASP.NET Core app can be hosted as an IIS sub-application (sub-app). 하위 앱의 경로는 루트 앱 URL의 일부가 됩니다.The sub-app's path becomes part of the root app's URL.

하위 앱 내의 정적 자산 링크는 물결표-슬래시(~/) 표기법을 사용해야 합니다.Static asset links within the sub-app should use tilde-slash (~/) notation. 물결표-슬래시 표기법은 태그 도우미를 트리거하여 하위 앱의 PathBase를 렌더링된 상대 링크 앞에 추가합니다.Tilde-slash notation triggers a Tag Helper to prepend the sub-app's pathbase to the rendered relative link. /subapp_path에서 하위 앱의 경우, src="~/image.png"와 연결된 이미지가 src="/subapp_path/image.png"으로 렌더링됩니다.For a sub-app at /subapp_path, an image linked with src="~/image.png" is rendered as src="/subapp_path/image.png". 루트 앱의 정적 파일 미들웨어는 정적 파일 요청을 처리하지 않습니다.The root app's Static File Middleware doesn't process the static file request. 요청은 하위 앱의 정적 파일 미들웨어에서 처리됩니다.The request is processed by the sub-app's Static File Middleware.

정적 자산의 src 특성이 절대 경로(예: src="/image.png")로 설정된 경우 링크는 하위 앱의 PathBase 없이 렌더링됩니다.If a static asset's src attribute is set to an absolute path (for example, src="/image.png"), the link is rendered without the sub-app's pathbase. 루트 앱의 정적 파일 미들웨어는 루트 앱의 웹 루트에서 자산을 제공하려고 시도하며, 그 결과 루트 앱에서 정적 자산을 사용할 수 있지 않으면 ‘404 - 찾을 수 없음’이 발생합니다.The root app's Static File Middleware attempts to serve the asset from the root app's web root, which results in a 404 - Not Found response unless the static asset is available from the root app.

ASP.NET Core 앱을 다른 ASP.NET Core 앱에서 하위 앱으로 호스팅하려면 다음을 수행합니다.To host an ASP.NET Core app as a sub-app under another ASP.NET Core app:

  1. 하위 앱에 대한 앱 풀을 설정합니다.Establish an app pool for the sub-app. 데스크톱 CLR(.NET CLR)이 아닌 .NET Core용 CoreCLR(Core 공용 언어 런타임)이 부팅되어 작업자 프로세스의 앱을 호스트하기 때문에 .NET CLR 버전관리 코드 없음으로 설정합니다.Set the .NET CLR Version to No Managed Code because the Core Common Language Runtime (CoreCLR) for .NET Core is booted to host the app in the worker process, not the desktop CLR (.NET CLR).

  2. 루트 사이트 아래의 폴더에 하위 앱을 사용하여 IIS 관리자에 루트 사이트를 추가합니다.Add the root site in IIS Manager with the sub-app in a folder under the root site.

  3. IIS 관리자에서 하위 앱 폴더를 마우스 오른쪽 단추로 클릭하고 Convert to Application(애플리케이션으로 변환)을 선택합니다.Right-click the sub-app folder in IIS Manager and select Convert to Application.

  4. Add Application(애플리케이션 추가) 대화 상자에서 애플리케이션 풀에 대한 선택 단추를 사용하여 하위 앱에 대해 만든 앱 풀을 할당합니다.In the Add Application dialog, use the Select button for the Application Pool to assign the app pool that you created for the sub-app. 확인을 선택합니다.Select OK.

하위 앱에 대한 별도의 앱 풀 할당은 In-process 호스팅 모델을 사용할 때 필요합니다.The assignment of a separate app pool to the sub-app is a requirement when using the in-process hosting model.

In-process 호스팅 모델 및 ASP.NET Core 모듈 구성에 대한 자세한 내용은 ASP.NET Core 모듈을(를) 참조하세요.For more information on the in-process hosting model and configuring the ASP.NET Core Module, see ASP.NET Core 모듈.

web.config를 사용하여 IIS 구성Configuration of IIS with web.config

IIS 구성은 ASP.NET Core 모듈을 사용하여 ASP.NET Core 앱에 대해 작동하는 IIS 시나리오에서 web.config에 포함된 <system.webServer> 섹션의 영향을 받습니다.IIS configuration is influenced by the <system.webServer> section of web.config for IIS scenarios that are functional for ASP.NET Core apps with the ASP.NET Core Module. 예를 들어, IIS 구성은 동적 압축에 대해 작동합니다.For example, IIS configuration is functional for dynamic compression. IIS가 동적 압축을 사용하도록 서버 수준에서 구성된 경우, 앱의 web.config 파일에 포함된 <urlCompression> 요소가 ASP.NET Core 앱에 대해 이를 비활성화할 수 있습니다.If IIS is configured at the server level to use dynamic compression, the <urlCompression> element in the app's web.config file can disable it for an ASP.NET Core app.

자세한 내용은 다음 항목을 참조하세요.For more information, see the following topics:

격리된 앱 풀에서 실행되는 개별 앱에 대해 환경 변수를 설정하려면(IIS 10.0 이상에서 지원됨), IIS 참조 문서에서 환경 변수 <environmentVariables> 항목의 ‘AppCmd.exe 명령’ 섹션을 참조하세요.To set environment variables for individual apps running in isolated app pools (supported for IIS 10.0 or later), see the AppCmd.exe command section of the Environment Variables <environmentVariables> topic in the IIS reference documentation.

web.config 구성 섹션Configuration sections of web.config

web.config에 있는 ASP.NET 4.x 앱의 구성 섹션은 ASP.NET Core 앱의 구성에 사용되지 않습니다.Configuration sections of ASP.NET 4.x apps in web.config aren't used by ASP.NET Core apps for configuration:

  • <system.web>
  • <appSettings>
  • <connectionStrings>
  • <location>

ASP.NET Core 앱은 다른 구성 공급자를 사용하여 구성됩니다.ASP.NET Core apps are configured using other configuration providers. 자세한 내용은 구성을 참고하시기 바랍니다.For more information, see Configuration.

애플리케이션 풀Application Pools

앱 풀 격리는 호스팅 모델에 따라 결정됩니다.App pool isolation is determined by the hosting model:

  • In-process 호스팅: 앱은 별도의 앱 풀에서 실행해야 합니다.In-process hosting: Apps are required to run in separate app pools.
  • Out-of-process 호스팅: 각 앱을 자체 앱 풀에서 실행하여 앱을 서로 격리하는 것이 좋습니다.Out-of-process hosting: We recommend isolating the apps from each other by running each app in its own app pool.

IIS 웹 사이트 추가 대화 상자는 기본적으로 앱당 단일 앱 풀로 구성됩니다.The IIS Add Website dialog defaults to a single app pool per app. 사이트 이름을 제공하면 텍스트가 자동으로 애플리케이션 풀 텍스트 상자로 전송됩니다.When a Site name is provided, the text is automatically transferred to the Application pool textbox. 사이트를 추가할 때 이 사이트 이름을 사용하여 새로운 앱 풀이 생성됩니다.A new app pool is created using the site name when the site is added.

애플리케이션 풀 IdentityApplication Pool Identity

응용 프로그램 풀 ID 계정을 사용하면 도메인 또는 로컬 계정을 만들고 관리할 필요 없이 고유한 계정으로 앱을 실행할 수 있습니다.An app pool identity account allows an app to run under a unique account without having to create and manage domains or local accounts. IIS 8.0 이상에서 IIS WAS(관리 작업자 프로세스)는 새로운 앱 풀의 이름으로 가상 계정을 만들고, 기본적으로 이 계정으로 앱 풀의 작업자 프로세스를 실행합니다.On IIS 8.0 or later, the IIS Admin Worker Process (WAS) creates a virtual account with the name of the new app pool and runs the app pool's worker processes under this account by default. IIS 관리 콘솔의 애플리케이션 풀에 대한 고급 설정 아래에서 IdentityApplicationPoolIdentity 를 사용하도록 설정되어 있는지 확인합니다.In the IIS Management Console under Advanced Settings for the app pool, ensure that the Identity is set to use ApplicationPoolIdentity:

애플리케이션 풀 고급 설정 대화 상자

IIS 관리 프로세스는 Windows 보안 시스템에 앱 풀 이름이 포함된 보안 식별자를 만듭니다.The IIS management process creates a secure identifier with the name of the app pool in the Windows Security System. 리소스는 이 ID를 사용하여 보호할 수 있습니다.Resources can be secured using this identity. 그러나 이 ID는 실제 사용자 계정이 아니며 Windows 사용자 관리 콘솔에 표시되지 않습니다.However, this identity isn't a real user account and doesn't show up in the Windows User Management Console.

IIS 작업자 프로세스에서 앱에 대한 높은 액세스 권한이 필요한 경우 앱이 포함된 디렉터리에 대한 ACL(액세스 제어 목록)을 수정합니다.If the IIS worker process requires elevated access to the app, modify the Access Control List (ACL) for the directory containing the app:

  1. [Windows 탐색기]를 열고 해당 하위 디렉터리로 이동합니다.Open Windows Explorer and navigate to the directory.

  2. 디렉터리를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.Right-click on the directory and select Properties.

  3. 보안 탭 아래에서 편집 단추, 추가 단추를 차례로 선택합니다.Under the Security tab, select the Edit button and then the Add button.

  4. 위치 단추를 선택하고 시스템이 선택되어 있는지 확인합니다.Select the Locations button and make sure the system is selected.

  5. 선택할 개체 이름 입력 영역에 IIS AppPool\<app_pool_name> 을 입력합니다.Enter IIS AppPool\<app_pool_name> in Enter the object names to select area. 이름 확인 단추를 선택합니다.Select the Check Names button. DefaultAppPool의 경우 IIS AppPool\DefaultAppPool을 사용하는 이름을 확인합니다.For the DefaultAppPool check the names using IIS AppPool\DefaultAppPool. 이름 확인 단추를 선택하면 개체 이름 영역에 DefaultAppPool 값이 표시됩니다.When the Check Names button is selected, a value of DefaultAppPool is indicated in the object names area. 개체 이름 영역에 앱 풀 이름을 직접 입력할 수는 없습니다.It isn't possible to enter the app pool name directly into the object names area. 개체 이름을 확인할 때는 IIS AppPool\<app_pool_name> 형식을 사용합니다.Use the IIS AppPool\<app_pool_name> format when checking for the object name.

    앱 폴더에 대한 사용자 또는 그룹 선택 대화 상자: “이름 확인”을 선택하기 전에 개체 이름 영역의 “IIS AppPool"에 앱 풀 이름 “DefaultAppPool”이 추가됩니다.

  6. 확인을 선택합니다.Select OK.

    앱 폴더에 대한 사용자 또는 그룹 선택 대화 상자: “이름 확인”을 선택하면 개체 이름 영역에 개체 이름 “DefaultAppPool”이 표시됩니다.

  7. 읽기 및 실행 권한은 기본적으로 부여됩니다.Read & execute permissions should be granted by default. 필요에 따라 추가 권한을 제공합니다.Provide additional permissions as needed.

ICACLS 도구를 사용하여 명령 프롬프트에서 액세스 권한을 부여할 수도 있습니다.Access can also be granted at a command prompt using the ICACLS tool. DefaultAppPool을 예로 들면, 다음 명령이 사용됩니다.Using the DefaultAppPool as an example, the following command is used:

ICACLS C:\sites\MyWebApp /grant "IIS AppPool\DefaultAppPool":F

자세한 내용은 icacls 항목을 참조하세요.For more information, see the icacls topic.

HTTP/2 지원HTTP/2 support

HTTP/2는 다음과 같은 IIS 배포 시나리오에서 ASP.NET Core를 통해 지원됩니다.HTTP/2 is supported with ASP.NET Core in the following IIS deployment scenarios:

  • In-ProcessIn-process
    • Windows Server 2016/Windows 10 이상, IIS 10 이상Windows Server 2016/Windows 10 or later; IIS 10 or later
    • TLS 1.2 이상 연결TLS 1.2 or later connection
  • Out of ProcessOut-of-process
    • Windows Server 2016/Windows 10 이상, IIS 10 이상Windows Server 2016/Windows 10 or later; IIS 10 or later
    • 공용 에지 서버 연결은 HTTP/2를 사용하지만 Kestrel 서버에 대한 역방향 프록시 연결은 HTTP/1.1을 사용합니다.Public-facing edge server connections use HTTP/2, but the reverse proxy connection to the Kestrel server uses HTTP/1.1.
    • TLS 1.2 이상 연결TLS 1.2 or later connection

In-Process 배포에서 HTTP/2 연결이 설정된 경우 HttpRequest.Protocol에서 HTTP/2를 보고합니다.For an in-process deployment when an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/2. Out of Process 배포에서 HTTP/2 연결이 설정된 경우 HttpRequest.Protocol에서 HTTP/1.1을 보고합니다.For an out-of-process deployment when an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/1.1.

In-process 및 out-of-process 호스팅 모델에 대한 자세한 내용은 ASP.NET Core 모듈을 참조하세요.For more information on the in-process and out-of-process hosting models, see ASP.NET Core 모듈.

HTTP/2는 기본적으로 사용됩니다.HTTP/2 is enabled by default. HTTP/2 연결이 설정되지 않은 경우 연결이 HTTP/1.1로 대체됩니다.Connections fall back to HTTP/1.1 if an HTTP/2 connection isn't established. IIS 배포가 포함된 HTTP/2 구성에 대한 자세한 내용은 IIS의 HTTP/2를 참조하세요.For more information on HTTP/2 configuration with IIS deployments, see HTTP/2 on IIS.

CORS 실행 전 요청CORS preflight requests

이 섹션은 .NET Framework를 대상으로 하는 ASP.NET Core 앱에만 적용됩니다.This section only applies to ASP.NET Core apps that target the .NET Framework.

.NET Framework를 대상으로 하는 ASP.NET Core 앱의 경우 OPTIONS 요청은 IIS에서 기본적으로 앱에 전달되지 않습니다.For an ASP.NET Core app that targets the .NET Framework, OPTIONS requests aren't passed to the app by default in IIS. OPTIONS 요청을 전달하도록 web.config에서 앱의 IIS 처리기를 구성하는 방법을 알아보려면 ASP.NET Web API 2에서 원본 간 요청을 사용하도록 설정: CORS 작동 방식을 참조하세요.To learn how to configure the app's IIS handlers in web.config to pass OPTIONS requests, see Enable cross-origin requests in ASP.NET Web API 2: How CORS Works.

애플리케이션 초기화 모듈 및 유휴 시간 제한Application Initialization Module and Idle Timeout

ASP.NET Core 모듈 버전 2에서 IIS에 호스트된 경우When hosted in IIS by the ASP.NET Core Module version 2:

애플리케이션 초기화 모듈Application Initialization Module

‘앱 호스팅 In Process 및 Out of Process에 적용됩니다.’Applies to apps hosted in-process and out-of-process.

IIS 애플리케이션 초기화는 앱 풀이 시작되거나 재활용될 때 HTTP 요청을 앱으로 보내는 IIS 기능입니다.IIS Application Initialization is an IIS feature that sends an HTTP request to the app when the app pool starts or is recycled. 요청은 앱이 시작되도록 트리거합니다.The request triggers the app to start. 기본적으로 IIS는 앱의 루트 URL(/)에 요청을 실행하여 앱을 초기화합니다(구성에 대한 자세한 내용은 추가 리소스 참조).By default, IIS issues a request to the app's root URL (/) to initialize the app (see the additional resources for more details on configuration).

IIS 애플리케이션 초기화 역할 기능이 사용하도록 설정되었는지 확인합니다.Confirm that the IIS Application Initialization role feature in enabled:

Windows 7 이상 데스크톱 시스템에서 IIS를 로컬로 사용하는 경우On Windows 7 or later desktop systems when using IIS locally:

  1. 제어판 > 프로그램 > 프로그램 및 기능 > Windows 기능 사용/사용 안 함(화면 왼쪽)으로 차례로 이동합니다.Navigate to Control Panel > Programs > Programs and Features > Turn Windows features on or off (left side of the screen).
  2. 인터넷 정보 서비스 > World Wide Web 서비스 > 애플리케이션 개발 기능을 엽니다.Open Internet Information Services > World Wide Web Services > Application Development Features.
  3. 애플리케이션 초기화 확인란을 선택합니다.Select the check box for Application Initialization.

Windows Server 2008 R2 이상On Windows Server 2008 R2 or later:

  1. 역할 및 기능 추가 마법사를 엽니다.Open the Add Roles and Features Wizard.
  2. 역할 서비스 선택 패널에서 애플리케이션 개발 노드를 엽니다.In the Select role services panel, open the Application Development node.
  3. 애플리케이션 초기화 확인란을 선택합니다.Select the check box for Application Initialization.

다음 방법 중 하나를 사용하여 사이트에 대해 애플리케이션 초기화 모듈을 활성화합니다.Use either of the following approaches to enable the Application Initialization Module for the site:

  • IIS 관리자 사용Using IIS Manager:

    1. 연결 패널에서 애플리케이션 풀을 선택합니다.Select Application Pools in the Connections panel.
    2. 목록에서 앱의 앱 풀을 마우스 오른쪽 단추로 클릭하고 고급 설정을 선택합니다.Right-click the app's app pool in the list and select Advanced Settings.
    3. 기본 시작 모드OnDemand입니다.The default Start Mode is OnDemand. 시작 모드AlwaysRunning으로 설정합니다.Set the Start Mode to AlwaysRunning. 확인을 선택합니다.Select OK.
    4. 연결 패널에서 사이트 노드를 엽니다.Open the Sites node in the Connections panel.
    5. 앱을 마우스 오른쪽 단추로 클릭하고 웹 사이트 관리 > 고급 설정을 선택합니다.Right-click the app and select Manage Website > Advanced Settings.
    6. 기본 미리 로드 사용 설정은 False입니다.The default Preload Enabled setting is False. 미리 로드 사용True로 설정합니다.Set Preload Enabled to True. 확인을 선택합니다.Select OK.
  • web.config를 사용하여 doAppInitAfterRestarttrue로 설정된 <applicationInitialization> 요소를 앱의 web.config 파일에 있는 <system.webServer> 요소에 추가합니다.Using web.config, add the <applicationInitialization> element with doAppInitAfterRestart set to true to the <system.webServer> elements in the app's web.config file:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <location path="." inheritInChildApplications="false">
        <system.webServer>
          <applicationInitialization doAppInitAfterRestart="true" />
        </system.webServer>
      </location>
    </configuration>
    

유휴 시간 제한Idle Timeout

‘앱 호스팅 In Process 에만 적용됩니다.’Only applies to apps hosted in-process.

앱의 유휴 상태를 방지하려면 IIS 관리자를 사용하여 앱 풀의 유휴 시간 제한을 설정합니다.To prevent the app from idling, set the app pool's idle timeout using IIS Manager:

  1. 연결 패널에서 애플리케이션 풀을 선택합니다.Select Application Pools in the Connections panel.
  2. 목록에서 앱의 앱 풀을 마우스 오른쪽 단추로 클릭하고 고급 설정을 선택합니다.Right-click the app's app pool in the list and select Advanced Settings.
  3. 기본 유휴 시간 제한(분)20분입니다.The default Idle Time-out (minutes) is 20 minutes. 유휴 시간 제한(분)0으로 설정합니다.Set the Idle Time-out (minutes) to 0 (zero). 확인을 선택합니다.Select OK.
  4. 작업자 프로세스를 재순환합니다.Recycle the worker process.

앱 호스팅 Out of Process가 시간 초과되지 않도록 하려면 다음 방법 중 하나를 사용합니다.To prevent apps hosted out-of-process from timing out, use either of the following approaches:

애플리케이션 초기화 모듈 및 유휴 시간 제한 추가 리소스Application Initialization Module and Idle Timeout additional resources

IIS 관리자를 위한 배포 리소스Deployment resources for IIS administrators

추가 자료Additional resources

IIS 서버에 ASP.NET Core 앱을 게시하는 방법에 대한 자습서 경험은 IIS에 ASP.NET Core 앱 게시을(를) 참조하세요.For a tutorial experience on publishing an ASP.NET Core app to an IIS server, see IIS에 ASP.NET Core 앱 게시.

.NET Core 호스팅 번들 설치Install the .NET Core Hosting Bundle

지원되는 운영 체제Supported operating systems

지원되는 운영 체제는 다음과 같습니다.The following operating systems are supported:

  • Windows 7 이상Windows 7 or later
  • Windows Server 2008 R2 이상Windows Server 2008 R2 or later

HTTP.sys 서버(이전의 WebListener)는 IIS를 사용하는 역방향 프록시 구성에서 작동하지 않습니다.HTTP.sys server (formerly called WebListener) doesn't work in a reverse proxy configuration with IIS. Kestrel 서버를 사용합니다.Use the Kestrel server.

Azure에서 호스트하는 방법에 대한 자세한 내용은 Azure App Service에 ASP.NET Core 앱 배포를 참조하세요.For information on hosting in Azure, see Azure App Service에 ASP.NET Core 앱 배포.

문제 해결 지침은 ASP.NET Core 프로젝트 문제 해결 및 디버깅을 참조하십시오.For troubleshooting guidance, see ASP.NET Core 프로젝트 문제 해결 및 디버깅.

지원되는 플랫폼Supported platforms

32비트(x86) 또는 64비트(x64) 배포용으로 게시된 앱이 지원됩니다.Apps published for 32-bit (x86) or 64-bit (x64) deployment are supported. 앱이 다음과 같은 경우가 아닌 한 32비트(x86) .NET Core SDK를 포함한 32비트 앱을 배포합니다.Deploy a 32-bit app with a 32-bit (x86) .NET Core SDK unless the app:

  • 64비트 앱에 사용할 수 있는 더 큰 가상 메모리 주소 공간이 필요합니다.Requires the larger virtual memory address space available to a 64-bit app.
  • 더 큰 IIS 스택 크기가 필요합니다.Requires the larger IIS stack size.
  • 64비트 네이티브 종속성이 있습니다.Has 64-bit native dependencies.

64비트 앱을 게시하려면 64비트(x64) .NET Core SDK를 사용합니다.Use a 64-bit (x64) .NET Core SDK to publish a 64-bit app. 64비트 런타임이 호스트 시스템에 있어야 합니다.A 64-bit runtime must be present on the host system.

호스팅 모델Hosting models

In-Process 호스팅 모델In-process hosting model

In-Process 호스팅을 사용하면 ASP.NET Core 앱은 IIS 작업자 프로세스와 동일한 프로세스에서 실행됩니다.Using in-process hosting, an ASP.NET Core app runs in the same process as its IIS worker process. In Process 호스팅은 다음과 같은 이유로 Out of Process 호스팅보다 향상된 성능을 제공합니다.In-process hosting provides improved performance over out-of-process hosting because:

  • 요청은 루프백 어댑터를 통해 프록시되지 않습니다.Requests aren't proxied over the loopback adapter. 루프백 어댑터는 나가는 네트워크 트래픽을 동일한 컴퓨터로 다시 반환하는 네트워크 인터페이스입니다.A loopback adapter is a network interface that returns outgoing network traffic back to the same machine.

IIS는 Windows Process Activation Service(WAS)를 사용하여 프로세스 관리를 처리합니다.IIS handles process management with the Windows Process Activation Service (WAS).

ASP.NET Core 모듈:The ASP.NET Core Module:

  • 앱 초기화를 수행합니다.Performs app initialization.
    • CoreCLR을 로드합니다.Loads the CoreCLR.
    • Program.Main.Calls Program.Main.
  • IIS 네이티브 요청의 수명을 처리합니다.Handles the lifetime of the IIS native request.

In-process 호스팅 모델은 .NET Framework를 대상으로 하는 ASP.NET Core 앱을 지원하지 않습니다.The in-process hosting model isn't supported for ASP.NET Core apps that target the .NET Framework.

다음 다이어그램은 IIS, ASP.NET Core 모듈 및 In-Process에 호스트된 앱 간의 관계를 보여 줍니다.The following diagram illustrates the relationship between IIS, the ASP.NET Core Module, and an app hosted in-process:

In Process 호스팅 시나리오에서 ASP.NET Core 모듈

요청은 웹에서 커널 모드 HTTP.sys 드라이버로 도착합니다.A request arrives from the web to the kernel-mode HTTP.sys driver. 드라이버는 웹 사이트의 구성된 포트[일반적으로 80(HTTP) 또는 443(HTTPS)]에서 IIS로 네이티브 요청을 라우팅합니다.The driver routes the native request to IIS on the website's configured port, usually 80 (HTTP) or 443 (HTTPS). ASP.NET Core 모듈에서는 기본 요청을 수신하고 IIS HTTP Server(IISHttpServer)에 전달합니다.The ASP.NET Core Module receives the native request and passes it to IIS HTTP Server (IISHttpServer). IIS HTTP 서버는 네이티브 요청을 관리형 요청으로 변환하는 IIS의 In-process 서버를 구현한 것입니다.IIS HTTP Server is an in-process server implementation for IIS that converts the request from native to managed.

IIS HTTP Server가 요청을 처리하면 해당 요청이 ASP.NET Core 미들웨어 파이프라인에 푸시됩니다.After the IIS HTTP Server processes the request, the request is pushed into the ASP.NET Core middleware pipeline. 미들웨어 파이프라인은 요청을 처리하고 앱의 논리에 HttpContext 인스턴스로 전달합니다.The middleware pipeline handles the request and passes it on as an HttpContext instance to the app's logic. 앱의 응답은 IIS HTTP 서버를 통해 IIS로 다시 전달됩니다.The app's response is passed back to IIS through IIS HTTP Server. IIS는 요청을 시작한 클라이언트에 응답을 보냅니다.IIS sends the response to the client that initiated the request.

In-process 호스팅은 기존 앱에 대한 옵트인(opt-in) 기능이지만 dotnet new 템플릿은 기본적으로 모든 IIS 및 IIS Express 시나리오에 대해 In-Process 호스팅 모델로 설정됩니다.In-process hosting is opt-in for existing apps, but dotnet new templates default to the in-process hosting model for all IIS and IIS Express scenarios.

CreateDefaultBuilderUseIIS 메서드를 호출하여 CoreCLR을 부팅하고 IIS 작업자 프로세스(w3wp.exe 또는 iisexpress.exe) 내에서 앱을 호스트함으로써 IServer 인스턴스를 추가합니다.CreateDefaultBuilder adds an IServer instance by calling the UseIIS method to boot the CoreCLR and host the app inside of the IIS worker process (w3wp.exe or iisexpress.exe). 성능 테스트의 결과 .NET Core 앱을 in-process로 호스트하는 것이 앱을 out-of-process로 호스트하고 Kestrel 서버에 대한 요청을 프록시하는 것보다 훨씬 높은 요청 처리량을 제공함을 나타냅니다.Performance tests indicate that hosting a .NET Core app in-process delivers significantly higher request throughput compared to hosting the app out-of-process and proxying requests to Kestrel server.

Out-of-Process 호스팅 모델Out-of-process hosting model

ASP.NET Core 앱은 IIS 작업자 프로세스와 별도의 프로세스에서 실행되므로 ASP.NET Core 모듈은 프로세스 관리를 수행합니다.Because ASP.NET Core apps run in a process separate from the IIS worker process, the ASP.NET Core Module handles process management. 모듈은 첫 번째 요청이 들어올 때 ASP.NET Core 앱용 프로세스를 시작하고 종료되거나 충돌이 발생하면 앱을 다시 시작합니다.The module starts the process for the ASP.NET Core app when the first request arrives and restarts the app if it shuts down or crashes. 이는 Windows Process Activation Service(WAS)로 관리되는 In-Process로 실행되는 앱에서 볼 수 있는 동작과 기본적으로 동일합니다.This is essentially the same behavior as seen with apps that run in-process that are managed by the Windows Process Activation Service (WAS).

다음 다이어그램은 IIS, ASP.NET Core 모듈 및 Out-of-Process에 호스트된 앱 간의 관계를 보여 줍니다.The following diagram illustrates the relationship between IIS, the ASP.NET Core Module, and an app hosted out-of-process:

Out-of-Process 호스팅 시나리오에서 ASP.NET Core 모듈

요청은 웹에서 커널 모드 HTTP.sys 드라이버로 도착합니다.Requests arrive from the web to the kernel-mode HTTP.sys driver. 드라이버는 웹 사이트의 구성된 포트(일반적으로 80(HTTP) 또는 443(HTTPS))에서 IIS로 요청을 라우팅합니다.The driver routes the requests to IIS on the website's configured port, usually 80 (HTTP) or 443 (HTTPS). 모듈은 포트 80 또는 443이 아닌 앱의 임의의 포트에서 Kestrel로 요청을 전달합니다.The module forwards the requests to Kestrel on a random port for the app, which isn't port 80 or 443.

모듈은 시작 시 환경 변수를 통해 포트를 지정하고 UseIISIntegration 확장은 http://localhost:{PORT}에서 수신 대기하도록 서버를 구성합니다.The module specifies the port via an environment variable at startup, and the UseIISIntegration extension configures the server to listen on http://localhost:{PORT}. 추가 검사가 수행되고 모듈에서 시작되지 않은 요청은 거부됩니다.Additional checks are performed, and requests that don't originate from the module are rejected. 모듈은 HTTPS 전달을 지원하지 않으므로 HTTPS를 통해 IIS에서 수신된 경우에도 HTTP를 통해 요청이 전달됩니다.The module doesn't support HTTPS forwarding, so requests are forwarded over HTTP even if received by IIS over HTTPS.

Kestrel이 모듈에서 요청을 선택한 후, 요청은 ASP.NET Core 미들웨어 파이프라인으로 푸시됩니다.After Kestrel picks up the request from the module, the request is pushed into the ASP.NET Core middleware pipeline. 미들웨어 파이프라인은 요청을 처리하고 앱의 논리에 HttpContext 인스턴스로 전달합니다.The middleware pipeline handles the request and passes it on as an HttpContext instance to the app's logic. IIS 통합에 의해 추가된 미들웨어는 체계, 원격 IP 및 경로 기준을 Kestrel에 요청을 전달하기 위한 계정으로 업데이트합니다.Middleware added by IIS Integration updates the scheme, remote IP, and pathbase to account for forwarding the request to Kestrel. 앱의 응답은 IIS로 다시 전달되고, 요청을 시작한 HTTP 클라이언트에 다시 푸시됩니다.The app's response is passed back to IIS, which pushes it back out to the HTTP client that initiated the request.

ASP.NET Core 모듈 구성 지침은 ASP.NET Core 모듈을 참조하세요.For ASP.NET Core Module configuration guidance, see ASP.NET Core 모듈.

호스팅에 대한 자세한 내용은 ASP.NET Core의 호스트를 참조하세요.For more information on hosting, see Host in ASP.NET Core.

애플리케이션 구성Application configuration

IISIntegration 구성 요소 사용Enable the IISIntegration components

CreateWebHostBuilder(Program.cs)에서 호스트를 빌드하는 경우 CreateDefaultBuilder를 호출하여 IIS 통합을 사용하도록 설정합니다.When building a host in CreateWebHostBuilder (Program.cs), call CreateDefaultBuilder to enable IIS integration:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        ...

CreateDefaultBuilder에 대한 자세한 내용은 ASP.NET Core 웹 호스트를 참조하세요.For more information on CreateDefaultBuilder, see ASP.NET Core 웹 호스트.

IIS 옵션IIS options

In-process 호스팅 모델In-process hosting model

IIS 서버 옵션을 구성하려면 IISServerOptions에 대한 서비스 구성을 ConfigureServices에 포함합니다.To configure IIS Server options, include a service configuration for IISServerOptions in ConfigureServices. 다음 예제에서는 AutomaticAuthentication을 사용하지 않도록 설정합니다.The following example disables AutomaticAuthentication:

services.Configure<IISServerOptions>(options => 
{
    options.AutomaticAuthentication = false;
});
옵션Option 기본값Default 설정Setting
AutomaticAuthentication true true인 경우 IIS 서버는 Windows 인증에 의해 인증된 HttpContext.User를 설정합니다.If true, IIS Server sets the HttpContext.User authenticated by Windows Authentication. false인 경우 서버는 HttpContext.User에 대한 ID만 제공하고, AuthenticationScheme에서 명시적으로 요청될 때 챌린지에 응답합니다.If false, the server only provides an identity for HttpContext.User and responds to challenges when explicitly requested by the AuthenticationScheme. IIS에서 Windows 인증은 AutomaticAuthentication이 작동하기 위해 사용하도록 설정되어야 합니다.Windows Authentication must be enabled in IIS for AutomaticAuthentication to function. 자세한 내용은 Windows 인증을 참조하세요.For more information, see Windows Authentication.
AuthenticationDisplayName null 로그인 페이지에서 사용자에게 나타나는 표시 이름을 설정합니다.Sets the display name shown to users on login pages.

Out-of-process 호스팅 모델Out-of-process hosting model

IIS 옵션을 구성하려면 IISOptions에 대한 서비스 구성을 ConfigureServices에 포함합니다.To configure IIS options, include a service configuration for IISOptions in ConfigureServices. 다음 예에서는 앱이 HttpContext.Connection.ClientCertificate를 채우는 것을 방지합니다.The following example prevents the app from populating HttpContext.Connection.ClientCertificate:

services.Configure<IISOptions>(options => 
{
    options.ForwardClientCertificate = false;
});
옵션Option 기본값Default 설정Setting
AutomaticAuthentication true true이면 IIS 통합 미들웨어Windows 인증에 의해 인증된 HttpContext.User를 설정합니다.If true, IIS Integration Middleware sets the HttpContext.User authenticated by Windows Authentication. false이면 미들웨어가 HttpContext.User에게 ID만 제공하고, AuthenticationScheme에서 명시적으로 요청될 때 챌린지에 응답합니다.If false, the middleware only provides an identity for HttpContext.User and responds to challenges when explicitly requested by the AuthenticationScheme. IIS에서 Windows 인증은 AutomaticAuthentication이 작동하기 위해 사용하도록 설정되어야 합니다.Windows Authentication must be enabled in IIS for AutomaticAuthentication to function. 자세한 내용은 Windows 인증 항목을 참조하세요.For more information, see the Windows Authentication topic.
AuthenticationDisplayName null 로그인 페이지에서 사용자에게 나타나는 표시 이름을 설정합니다.Sets the display name shown to users on login pages.
ForwardClientCertificate true true면서 MS-ASPNETCORE-CLIENTCERT 요청 헤더가 있는 경우 HttpContext.Connection.ClientCertificate가 채워집니다.If true and the MS-ASPNETCORE-CLIENTCERT request header is present, the HttpContext.Connection.ClientCertificate is populated.

프록시 서버 및 부하 분산 장치 시나리오Proxy server and load balancer scenarios

전달된 헤더 미들웨어를 구성하는 IIS 통합 미들웨어 및 ASP.NET Core 모듈은 체계(HTTP/HTTPS) 및 요청이 시작된 원격 IP 주소를 전달하도록 구성됩니다.The IIS Integration Middleware, which configures Forwarded Headers Middleware, and the ASP.NET Core Module are configured to forward the scheme (HTTP/HTTPS) and the remote IP address where the request originated. 추가 프록시 서버 및 부하 분산 장치 외에도 호스팅되는 앱에 추가 구성이 필요할 수 있습니다.Additional configuration might be required for apps hosted behind additional proxy servers and load balancers. 자세한 내용은 프록시 서버 및 부하 분산 장치를 사용하도록 ASP.NET Core 구성을 참조하세요.For more information, see Configure ASP.NET Core to work with proxy servers and load balancers.

web.config 파일web.config file

web.config 파일은 ASP.NET Core 모듈을 구성합니다.The web.config file configures the ASP.NET Core Module. web.config 파일을 만들고, 변하고, 게시하는 작업은 프로젝트를 게시할 때 MSBuild 대상(_TransformWebConfig)에 의해 처리됩니다.Creating, transforming, and publishing the web.config file is handled by an MSBuild target (_TransformWebConfig) when the project is published. 이 대상은 웹 SDK 대상(Microsoft.NET.Sdk.Web)에 나타납니다.This target is present in the Web SDK targets (Microsoft.NET.Sdk.Web). SDK는 프로젝트 파일을 기반으로 해서 설정됩니다.The SDK is set at the top of the project file:

<Project Sdk="Microsoft.NET.Sdk.Web">

프로젝트에 web.config 파일이 없는 경우, ASP.NET Core 모듈을 구성하기 위해 올바른 processPath‘인수’ 로 파일이 생성되어 게시된 출력으로 이동됩니다.If a web.config file isn't present in the project, the file is created with the correct processPath and arguments to configure the ASP.NET Core Module and moved to published output.

프로젝트에 web.config 파일이 있는 경우, ASP.NET Core 모듈을 구성하기 위해 올바른 processPath인수로 파일이 변환되어 게시된 출력으로 이동됩니다.If a web.config file is present in the project, the file is transformed with the correct processPath and arguments to configure the ASP.NET Core Module and moved to published output. 변환은 이 파일의 IIS 구성 설정을 수정하지 않습니다.The transformation doesn't modify IIS configuration settings in the file.

web.config 파일은 활성 IIS 모듈을 제어하는 추가 IIS 구성 설정을 제공할 수 있습니다.The web.config file may provide additional IIS configuration settings that control active IIS modules. ASP.NET Core 앱을 사용하여 요청을 처리할 수 있는 IIS 모듈에 대한 자세한 내용은 IIS 모듈 항목을 참조하세요.For information on IIS modules that are capable of processing requests with ASP.NET Core apps, see the IIS modules topic.

웹 SDK가 web.config 파일을 변환하지 못하게 하려면 프로젝트 파일의 <IsTransformWebConfigDisabled> 속성을 사용합니다.To prevent the Web SDK from transforming the web.config file, use the <IsTransformWebConfigDisabled> property in the project file:

<PropertyGroup>
  <IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>

웹 SDK가 파일을 변환하지 않도록 설정하는 경우 개발자가 processPath인수를 수동으로 설정해야 합니다.When disabling the Web SDK from transforming the file, the processPath and arguments should be manually set by the developer. 자세한 내용은 ASP.NET Core 모듈를 참조하세요.For more information, see ASP.NET Core 모듈.

web.config 파일 위치web.config file location

ASP.NET Core 모듈을 올바르게 설정하려면 배포된 앱의 콘텐츠 루트 경로(일반적으로 앱 기본 경로)에 web.config 파일이 있어야 합니다.In order to set up the ASP.NET Core Module correctly, the web.config file must be present at the content root path (typically the app base path) of the deployed app. IIS에 제공되는 웹 사이트 실제 경로와 동일한 위치입니다.This is the same location as the website physical path provided to IIS. 웹 배포를 사용하여 여러 앱을 게시하도록 설정하려면 앱의 루트에 web.config 파일이 있어야 합니다.The web.config file is required at the root of the app to enable the publishing of multiple apps using Web Deploy.

중요한 파일은 <assembly>assembly>.runtimeconfig.json, <assembly>assembly>.xml(XML 문서 주석) 및 <assembly>assembly>.deps.json과 같은 앱의 실제 경로에 있습니다.Sensitive files exist on the app's physical path, such as <assembly>.runtimeconfig.json, <assembly>.xml (XML Documentation comments), and <assembly>.deps.json. web.config 파일이 있고 사이트가 정상적으로 시작되면 IIS는 요청되어도 이러한 중요한 파일을 제공하지 않습니다.When the web.config file is present and the site starts normally, IIS doesn't serve these sensitive files if they're requested. web.config 파일이 없거나, 이름이 잘못 지정되었거나, 정상적으로 시작되도록 사이트를 구성할 수 없는 경우 IIS에서 중요한 파일을 공개적으로 제공할 수도 있습니다.If the web.config file is missing, incorrectly named, or unable to configure the site for normal startup, IIS may serve sensitive files publicly.

web.config 파일이 항상 배포에 있어야 하며, 올바르게 이름이 지정되고, 정상적으로 시작되도록 사이트를 구성할 수 있어야 합니다. 프로덕션 배포에서 web.config 파일을 제거하지 마세요.The web.config file must be present in the deployment at all times, correctly named, and able to configure the site for normal start up. Never remove the web.config file from a production deployment.

web.config 변환Transform web.config

게시할 때 web.config를 변환해야 하는 경우(예: 구성, 프로필 또는 환경을 기반으로 환경 변수 설정) web.config 변환를 참조하세요.If you need to transform web.config on publish (for example, set environment variables based on the configuration, profile, or environment), see web.config 변환.

IIS 구성IIS configuration

Windows Server 운영 체제Windows Server operating systems

웹 서버(IIS) 서버 역할을 사용하도록 설정하고 역할 서비스를 설정합니다.Enable the Web Server (IIS) server role and establish role services.

  1. 관리 메뉴 또는 서버 관리자의 링크를 통해 역할 및 기능 추가 마법사를 사용합니다.Use the Add Roles and Features wizard from the Manage menu or the link in Server Manager. 서버 역할 단계에서 웹 서버(IIS) 확인란을 선택합니다.On the Server Roles step, check the box for Web Server (IIS).

    서버 역할 선택 단계에서 선택된 웹 서버 IIS 역할

  2. 기능 단계 후에는 웹 서버(IIS)에 대한 역할 서비스 단계가 로드됩니다.After the Features step, the Role services step loads for Web Server (IIS). 원하는 IIS 역할 서비스를 선택하거나 제공된 기본 역할 서비스를 적용합니다.Select the IIS role services desired or accept the default role services provided.

    역할 서비스 선택 단계에서 선택된 기본 역할 서비스

    Windows 인증(선택 사항)Windows Authentication (Optional)
    Windows 인증을 사용하도록 설정하려면 웹 서버 > 보안 노드를 확장합니다.To enable Windows Authentication, expand the following nodes: Web Server > Security. Windows 인증 기능을 선택합니다.Select the Windows Authentication feature. 자세한 내용은 Windows 인증 <windowsAuthentication>Windows 인증 구성을 참조하세요.For more information, see Windows Authentication <windowsAuthentication> and Configure Windows authentication.

    WebSockets(선택 사항)WebSockets (Optional)
    WebSockets는 ASP.NET Core 1.1 이상에서 지원됩니다.WebSockets is supported with ASP.NET Core 1.1 or later. WebSocket을 사용하도록 설정하려면 웹 서버 > 애플리케이션 개발 노드를 확장합니다.To enable WebSockets, expand the following nodes: Web Server > Application Development. WebSocket 프로토콜 기능을 선택합니다.Select the WebSocket Protocol feature. 자세한 내용은 WebSocket을 참고하시기 바랍니다.For more information, see WebSockets.

  3. 확인 단계를 진행하여 웹 서버 역할 및 서비스를 설치합니다.Proceed through the Confirmation step to install the web server role and services. 웹 서버(IIS) 역할을 설치한 후에 서버/IIS를 다시 시작할 필요는 없습니다.A server/IIS restart isn't required after installing the Web Server (IIS) role.

Windows 데스크톱 운영 체제Windows desktop operating systems

IIS 관리 콘솔World Wide Web 서비스를 사용하도록 설정합니다.Enable the IIS Management Console and World Wide Web Services.

  1. 제어판 > 프로그램 > 프로그램 및 기능 > Windows 기능 사용/사용 안 함(화면 왼쪽)으로 차례로 이동합니다.Navigate to Control Panel > Programs > Programs and Features > Turn Windows features on or off (left side of the screen).

  2. 인터넷 정보 서비스 노드를 엽니다.Open the Internet Information Services node. 웹 관리 도구 노드를 엽니다.Open the Web Management Tools node.

  3. IIS 관리 콘솔 확인란을 선택합니다.Check the box for IIS Management Console.

  4. World Wide Web 서비스 확인란을 선택합니다.Check the box for World Wide Web Services.

  5. World Wide Web 서비스의 기본 기능을 그대로 사용하거나 IIS 기능을 사용자 지정합니다.Accept the default features for World Wide Web Services or customize the IIS features.

    Windows 인증(선택 사항)Windows Authentication (Optional)
    Windows 인증을 사용하도록 설정하려면 World Wide Web 서비스 > 보안 노드를 확장합니다.To enable Windows Authentication, expand the following nodes: World Wide Web Services > Security. Windows 인증 기능을 선택합니다.Select the Windows Authentication feature. 자세한 내용은 Windows 인증 <windowsAuthentication>Windows 인증 구성을 참조하세요.For more information, see Windows Authentication <windowsAuthentication> and Configure Windows authentication.

    WebSockets(선택 사항)WebSockets (Optional)
    WebSockets는 ASP.NET Core 1.1 이상에서 지원됩니다.WebSockets is supported with ASP.NET Core 1.1 or later. WebSocket을 사용하도록 설정하려면 World Wide Web 서비스 > 애플리케이션 개발 기능 노드를 확장합니다.To enable WebSockets, expand the following nodes: World Wide Web Services > Application Development Features. WebSocket 프로토콜 기능을 선택합니다.Select the WebSocket Protocol feature. 자세한 내용은 WebSocket을 참고하시기 바랍니다.For more information, see WebSockets.

  6. IIS 설치 시 다시 시작해야 하는 경우 시스템을 다시 시작합니다.If the IIS installation requires a restart, restart the system.

Windows 기능에서 선택된 IIS 관리 콘솔 및 World Wide Web 서비스

.NET Core 호스팅 번들 설치Install the .NET Core Hosting Bundle

호스팅 시스템에 .NET Core 호스팅 번들을 설치합니다.Install the .NET Core Hosting Bundle on the hosting system. 번들은 .NET Core 런타임, .NET Core 라이브러리 및 ASP.NET Core 모듈을 설치합니다.The bundle installs the .NET Core Runtime, .NET Core Library, and the ASP.NET Core Module. 이 모듈을 통해 ASP.NET Core 앱을 IIS 배후에서 실행할 수 있습니다.The module allows ASP.NET Core apps to run behind IIS.

중요

IIS 이전에 호스팅 번들이 설치된 경우 번들 설치를 복구해야 합니다.If the Hosting Bundle is installed before IIS, the bundle installation must be repaired. IIS를 설치한 후 호스팅 번들 설치 프로그램을 다시 실행합니다.Run the Hosting Bundle installer again after installing IIS.

.NET Core의 64비트(x64) 버전을 설치한 후 호스팅 번들이 설치된 경우 SDK가 누락된 것처럼 보일 수 있습니다( .NET Core SDK가 검색되지 않음).If the Hosting Bundle is installed after installing the 64-bit (x64) version of .NET Core, SDKs might appear to be missing (No .NET Core SDKs were detected). 이 문제를 해결 하려면 ASP.NET Core 프로젝트 문제 해결 및 디버깅을 참조합니다.To resolve the problem, see ASP.NET Core 프로젝트 문제 해결 및 디버깅.

다운로드Download

  1. .NET Core 다운로드 페이지로 이동합니다.Navigate to the Download .NET Core page.
  2. 원하는 .NET Core 버전을 선택합니다.Select the desired .NET Core version.
  3. 앱 실행 - 런타임 열에서 원하는 .NET Core 런타임 버전의 행을 찾습니다.In the Run apps - Runtime column, find the row of the .NET Core runtime version desired.
  4. 호스팅 번들 링크를 사용하여 설치 관리자를 다운로드합니다.Download the installer using the Hosting Bundle link.

경고

일부 설치 관리자는 EOL(수명 종료)에 도달한 릴리스 버전을 포함하고 Microsoft에서 더 이상 지원되지 않습니다.Some installers contain release versions that have reached their end of life (EOL) and are no longer supported by Microsoft. 자세한 내용은 지원 정책을 참조하세요.For more information, see the support policy.

호스팅 번들 설치Install the Hosting Bundle

  1. 서버에서 설치 관리자를 실행합니다.Run the installer on the server. 관리자 명령 셸에서 설치 관리자를 실행할 때 다음 매개 변수를 사용할 수 있습니다.The following parameters are available when running the installer from an administrator command shell:

    • OPT_NO_ANCM=1: ASP.NET Core 모듈 설치를 건너뜁니다.OPT_NO_ANCM=1: Skip installing the ASP.NET Core Module.
    • OPT_NO_RUNTIME=1: .NET Core 런타임 설치를 건너뜁니다.OPT_NO_RUNTIME=1: Skip installing the .NET Core runtime. 서버에서 SCD(자체 포함 배포)만 호스트하는 경우에 사용됩니다.Used when the server only hosts self-contained deployments (SCD).
    • OPT_NO_SHAREDFX=1: ASP.NET 공유 프레임워크(ASP.NET 런타임) 설치를 건너뜁니다.OPT_NO_SHAREDFX=1: Skip installing the ASP.NET Shared Framework (ASP.NET runtime). 서버에서 SCD(자체 포함 배포)만 호스트하는 경우에 사용됩니다.Used when the server only hosts self-contained deployments (SCD).
    • OPT_NO_X86=1: x86 런타임 설치를 건너뜁니다.OPT_NO_X86=1: Skip installing x86 runtimes. 32비트 앱을 호스팅하지 않음을 아는 경우 이 매개 변수를 사용합니다.Use this parameter when you know that you won't be hosting 32-bit apps. 향후 32비트와 64비트 앱을 모두 호스트할 수 있는 기회가 있는 경우 이 매개 변수를 사용하지 않고 두 런타임을 모두 설치합니다.If there's any chance that you will host both 32-bit and 64-bit apps in the future, don't use this parameter and install both runtimes.
    • OPT_NO_SHARED_CONFIG_CHECK=1: 공유 구성(applicationHost.config)이 IIS 설치와 동일한 머신에 있는 경우 IIS 공유 구성 사용 선택을 해제합니다.OPT_NO_SHARED_CONFIG_CHECK=1: Disable the check for using an IIS Shared Configuration when the shared configuration (applicationHost.config) is on the same machine as the IIS installation. ASP.NET Core 2.2 이상 호스팅 번들러 설치 관리자에 대해서만 사용할 수 있습니다.Only available for ASP.NET Core 2.2 or later Hosting Bundler installers. 자세한 내용은 ASP.NET Core 모듈를 참조하세요.For more information, see ASP.NET Core 모듈.
  2. 시스템을 다시 시작하거나 명령 셸에서 다음 명령을 실행합니다.Restart the system or execute the following commands in a command shell:

    net stop was /y
    net start w3svc
    

    IIS를 다시 시작하면 설치 관리자에서 변경된 시스템 PATH(환경 변수)의 내용이 수집됩니다.Restarting IIS picks up a change to the system PATH, which is an environment variable, made by the installer.

호스팅 번들을 설치할 때 IIS에서 개별 사이트를 수동으로 중지하지 않아도 됩니다.It isn't necessary to manually stop individual sites in IIS when installing the Hosting Bundle. IIS가 다시 시작되면 호스트된 앱(IIS 사이트)이 다시 시작됩니다.Hosted apps (IIS sites) restart when IIS restarts. 앱은 애플리케이션 초기화 모듈을 포함하여 첫 번째 요청을 받으면 다시 시작됩니다.Apps start up again when they receive their first request, including from the Application Initialization Module.

ASP.NET Core에서는 공유 프레임워크 패키지의 패치 릴리스에 대한 롤포워드 동작을 채택합니다.ASP.NET Core adopts roll-forward behavior for patch releases of shared framework packages. IIS에서 호스트된 앱이 IIS를 통해 다시 시작되는 경우 앱은 첫 번째 요청을 받을 때 참조된 패키지의 최신 패치 릴리스와 함께 로드됩니다.When apps hosted by IIS restart with IIS, the apps load with the latest patch releases of their referenced packages when they receive their first request. IIS를 다시 시작하지 않으면 작업자 프로세스가 재생되고 첫 번째 요청을 받을 때 앱이 다시 시작되고 롤포워드 동작을 나타냅니다.If IIS isn't restarted, apps restart and exhibit roll-forward behavior when their worker processes are recycled and they receive their first request.

참고

IIS 공유 구성에 대한 자세한 내용은 IIS 공유 구성을 사용하는 ASP.NET Core 모듈을 참조하세요.For information on IIS Shared Configuration, see ASP.NET Core Module with IIS Shared Configuration.

Visual Studio을 사용하여 게시할 때 웹 배포 설치Install Web Deploy when publishing with Visual Studio

웹 배포를 사용하여 앱을 서버에 배포하는 경우 최신 버전의 웹 배포를 서버에 설치합니다.When deploying apps to servers with Web Deploy, install the latest version of Web Deploy on the server. 웹 배포를 설치하려면 WebPI(웹 플랫폼 설치 관리자)를 사용하거나 Microsoft 다운로드 센터에서 직접 설치 관리자를 가져옵니다.To install Web Deploy, use the Web Platform Installer (WebPI) or obtain an installer directly from the Microsoft Download Center. WebPI를 사용하는 것이 좋습니다.The preferred method is to use WebPI. WebPI는 호스팅 공급자에 대한 독립 실행형 설치 및 구성을 제공합니다.WebPI offers a standalone setup and a configuration for hosting providers.

IIS 사이트 만들기Create the IIS site

  1. 호스팅 시스템에서 앱의 게시된 폴더 및 파일을 포함할 폴더를 만듭니다.On the hosting system, create a folder to contain the app's published folders and files. 다음 단계에서는 폴더의 경로가 앱의 실제 경로로 IIS에 제공됩니다.In a following step, the folder's path is provided to IIS as the physical path to the app. 앱의 배포 폴더 및 파일 레이아웃에 대한 자세한 내용은 ASP.NET Core 디렉터리 구조를 참조하세요.For more information on an app's deployment folder and file layout, see ASP.NET Core 디렉터리 구조.

  2. IIS 관리자의 연결 패널에서 서버 노드를 엽니다.In IIS Manager, open the server's node in the Connections panel. 사이트 폴더를 마우스 오른쪽 단추로 클릭합니다.Right-click the Sites folder. 상황에 맞는 메뉴에서 웹 사이트 추가를 선택합니다.Select Add Website from the contextual menu.

  3. 사이트 이름을 제공하고 실제 경로를 앱의 배포 폴더로 설정합니다.Provide a Site name and set the Physical path to the app's deployment folder. 바인딩 구성을 제공하고 확인을 선택하여 웹 사이트를 만듭니다.Provide the Binding configuration and create the website by selecting OK:

    [웹 사이트 추가] 단계에서 사이트 이름, 실제 경로 및 호스트 이름을 제공합니다.

    경고

    최상위 와일드카드 바인딩(http://*:80/http://+:80)을 사용하지 않아야 합니다.Top-level wildcard bindings (http://*:80/ and http://+:80) should not be used. 최상위 와일드카드 바인딩은 보안 취약점에 앱을 노출시킬 수 있습니다.Top-level wildcard bindings can open up your app to security vulnerabilities. 강력한 와일드카드와 약한 와일드카드 모두에 적용됩니다.This applies to both strong and weak wildcards. 와일드카드보다는 명시적 호스트 이름을 사용합니다.Use explicit host names rather than wildcards. 전체 부모 도메인을 제어하는 경우 하위 도메인 와일드카드 바인딩(예: *.mysub.com)에는 이러한 보안 위험이 없습니다(취약한 *.com과 반대임).Subdomain wildcard binding (for example, *.mysub.com) doesn't have this security risk if you control the entire parent domain (as opposed to *.com, which is vulnerable). 자세한 내용은 rfc7230 섹션-5.4를 참조하세요.See rfc7230 section-5.4 for more information.

  4. 서버 노드에서 애플리케이션 풀을 선택합니다.Under the server's node, select Application Pools.

  5. 사이트의 앱 풀을 마우스 오른쪽 단추로 클릭하고 상황에 맞는 메뉴에서 기본 설정을 선택합니다.Right-click the site's app pool and select Basic Settings from the contextual menu.

  6. 애플리케이션 풀 편집 창에서 .NET CLR 버전관리 코드 없음으로 설정합니다.In the Edit Application Pool window, set the .NET CLR version to No Managed Code:

    .NET CLR 버전에 대해 관리 코드 없음 설정

    ASP.NET Core는 별도의 프로세스에서 실행되며 런타임을 관리합니다.ASP.NET Core runs in a separate process and manages the runtime. ASP.NET Core는 데스크톱 CLR(.NET CLR) 로드에 관계없이 실행됩니다. .NET Core용 CoreCLR(Core 공용 언어 런타임)이 부팅되어 작업자 프로세스의 앱을 호스트합니다.ASP.NET Core doesn't rely on loading the desktop CLR (.NET CLR)—the Core Common Language Runtime (CoreCLR) for .NET Core is booted to host the app in the worker process. .NET CLR 버전관리 코드 없음으로 설정하는 것은 선택 사항이지만 권장됩니다.Setting the .NET CLR version to No Managed Code is optional but recommended.

  7. ASP.NET Core 2.2 이상: In-process 호스팅 모델을 사용하는 64비트(x64) 자체 포함된 배포의 경우 32비트(x86) 프로세스에 대해 앱 풀을 사용하지 않도록 설정합니다.ASP.NET Core 2.2 or later: For a 64-bit (x64) self-contained deployment that uses the in-process hosting model, disable the app pool for 32-bit (x86) processes.

    IIS 관리자의 애플리케이션 풀에 있는 작업 사이드바에서 애플리케이션 풀 기본값 설정 또는 고급 설정을 선택합니다.In the Actions sidebar of IIS Manager > Application Pools, select Set Application Pool Defaults or Advanced Settings. 32비트 애플리케이션 사용을 찾아 값을 False로 설정합니다.Locate Enable 32-Bit Applications and set the value to False. 이 설정은 독립 프로세스 호스팅에 배포된 앱에 영향을 주지 않습니다.This setting doesn't affect apps deployed for out-of-process hosting.

  8. 프로세스 모델 ID에 적절한 권한이 있는지 확인합니다.Confirm the process model identity has the proper permissions.

    애플리케이션 풀의 기본 ID(프로세스 모델 > Identity )가 ApplicationPoolIdentity 에서 다른 ID로 변경되면, 새 ID에 앱의 폴더, 데이터베이스 및 기타 필요한 리소스에 액세스하는 데 필요한 권한이 있는지 확인합니다.If the default identity of the app pool (Process Model > Identity) is changed from ApplicationPoolIdentity to another identity, verify that the new identity has the required permissions to access the app's folder, database, and other required resources. 예를 들어 앱 풀에는 앱이 파일을 읽고 쓰는 폴더에 대한 읽기 및 쓰기 권한이 필요합니다.For example, the app pool requires read and write access to folders where the app reads and writes files.

Windows 인증 구성(선택 사항)Windows Authentication configuration (Optional)
자세한 내용은 Windows 인증 구성을 참조하세요.For more information, see Configure Windows authentication.

앱 배포Deploy the app

IIS 사이트 만들기 섹션에서 설정한 IIS 실제 경로 폴더에 앱을 배포합니다.Deploy the app to the IIS Physical path folder that was established in the Create the IIS site section. 웹 배포는 배포를 위해 권장되는 메커니즘이지만, 프로젝트의 게시 폴더에서 호스팅 시스템의 배포 폴더로 앱을 이동하기 위한 옵션에는 여러 가지가 있습니다.Web Deploy is the recommended mechanism for deployment, but several options exist for moving the app from the project's publish folder to the hosting system's deployment folder.

Visual Studio를 사용한 웹 배포Web Deploy with Visual Studio

웹 배포에서 사용할 게시 프로필을 만드는 방법은 ASP.NET Core 앱 배포용 Visual Studio 게시 프로필 항목을 참조하세요.See the Visual Studio publish profiles for ASP.NET Core app deployment topic to learn how to create a publish profile for use with Web Deploy. 호스팅 공급자가 게시 프로필을 제공하거나 게시 프로필을 만들 수 있도록 지원하는 경우 해당 프로필을 다운로드하고 Visual Studio 게시 대화 상자를 사용하여 가져옵니다.If the hosting provider provides a Publish Profile or support for creating one, download their profile and import it using the Visual Studio Publish dialog:

게시 대화 상자 페이지

Visual Studio 외부에서 웹 배포Web Deploy outside of Visual Studio

웹 배포는 Visual Studio 외부에서 명령줄을 통해 사용할 수도 있습니다.Web Deploy can also be used outside of Visual Studio from the command line. 자세한 내용은 웹 배포 도구를 참조하세요.For more information, see Web Deployment Tool.

웹 배포에 대한 대안Alternatives to Web Deploy

수동 복사, Xcopy, Robocopy, PowerShell 등의 여러 방법 중 하나를 사용하여 앱을 호스팅 시스템으로 이동합니다.Use any of several methods to move the app to the hosting system, such as manual copy, Xcopy, Robocopy, or PowerShell.

IIS에 ASP.NET Core 배포에 대한 자세한 내용은 IIS 관리자를 위한 배포 리소스 섹션을 참조하세요.For more information on ASP.NET Core deployment to IIS, see the Deployment resources for IIS administrators section.

웹 사이트 찾아보기Browse the website

앱이 호스팅 시스템에 배포된 후 앱의 공용 엔드포인트 중 하나에 요청합니다.After the app is deployed to the hosting system, make a request to one of the app's public endpoints.

다음 예제에서는 포트 80에서 사이트가 www.mysite.com의 IIS 호스트 이름에 바인딩됩니다.In the following example, the site is bound to an IIS Host name of www.mysite.com on Port 80. http://www.mysite.com에 대해 요청이 이루어졌습니다.A request is made to http://www.mysite.com:

IIS 시작 페이지가 로드된 Microsoft Edge 브라우저

배포 파일이 잠겨 있음Locked deployment files

앱이 실행 중이면 배포 폴더의 파일이 잠겨 있습니다.Files in the deployment folder are locked when the app is running. 잠긴 파일은 배포 중에 덮어쓸 수 없습니다.Locked files can't be overwritten during deployment. 배포에서 잠긴 파일을 해제하려면 다음 방법 중 하나를 사용하여 앱 풀을 중지합니다.To release locked files in a deployment, stop the app pool using one of the following approaches:

  • 웹 배포를 사용하고 프로젝트 파일에서 Microsoft.NET.Sdk.Web을 참조합니다.Use Web Deploy and reference Microsoft.NET.Sdk.Web in the project file. app_offline.htm 파일은 웹앱 디렉터리의 루트에 배치됩니다.An app_offline.htm file is placed at the root of the web app directory. 파일이 있는 경우 ASP.NET Core 모듈은 앱을 정상적으로 종료하고, 배포하는 동안 app_offline.htm 파일을 제공합니다.When the file is present, the ASP.NET Core Module gracefully shuts down the app and serves the app_offline.htm file during the deployment. 자세한 내용은 ASP.NET Core 모듈 구성 참조를 참조하세요.For more information, see the ASP.NET Core Module configuration reference.

  • 서버의 IIS 관리자에서 앱 풀을 수동으로 중지합니다.Manually stop the app pool in the IIS Manager on the server.

  • PowerShell을 사용하여 app_offline.htm을 삭제합니다(PowerShell 5 이상 필요).Use PowerShell to drop app_offline.htm (requires PowerShell 5 or later):

    $pathToApp = 'PATH_TO_APP'
    
    # Stop the AppPool
    New-Item -Path $pathToApp app_offline.htm
    
    # Provide script commands here to deploy the app
    
    # Restart the AppPool
    Remove-Item -Path $pathToApp app_offline.htm
    
    

데이터 보호Data protection

ASP.NET Core 데이터 보호 스택은 인증에 사용되는 미들웨어를 포함하여 여러 ASP.NET Core 미들웨어에서 사용됩니다.The ASP.NET Core Data Protection stack is used by several ASP.NET Core middlewares, including middleware used in authentication. 사용자 코드에서 데이터 보호 API가 호출되지 않더라도 배포 스크립트 또는 사용자 코드를 통해 영구적 암호화 키 저장소를 만들도록 데이터 보호를 구성해야 합니다.Even if Data Protection APIs aren't called by user code, data protection should be configured with a deployment script or in user code to create a persistent cryptographic key store. 데이터 보호를 구성하지 않으면 키는 메모리에 보관되고 앱이 다시 시작되면 삭제됩니다.If data protection isn't configured, the keys are held in memory and discarded when the app restarts.

키 링이 메모리에 저장된 경우 앱을 다시 시작하면 다음과 같이 됩니다.If the key ring is stored in memory when the app restarts:

  • 모든 cookie 기반 인증 토큰이 무효화됩니다.All cookie-based authentication tokens are invalidated.
  • 사용자는 다음 요청에서 다시 로그인해야 합니다.Users are required to sign in again on their next request.
  • 키 링으로 보호된 데이터의 암호를 더 이상 해독할 수 없습니다.Any data protected with the key ring can no longer be decrypted. 여기에는 CSRF 토큰ASP.NET Core MVC TempData cookie가 포함될 수 있습니다.This may include CSRF tokens and ASP.NET Core MVC TempData cookies.

IIS에서 키 링을 저장하도록 데이터 보호를 구성하려면 다음 방법 중 하나를 사용합니다.To configure data protection under IIS to persist the key ring, use one of the following approaches:

  • 데이터 보호 레지스트리키 만들기Create Data Protection Registry Keys

    ASP.NET 앱에서 사용되는 데이터 보호 키는 앱 외부의 레지스트리에 저장됩니다.Data protection keys used by ASP.NET Core apps are stored in the registry external to the apps. 지정된 앱의 키를 저장하려면 앱 풀에 대한 레지스트리 키를 만듭니다.To persist the keys for a given app, create registry keys for the app pool.

    WebFarm이 아닌 독립 실행형 IIS 설치의 경우 Data Protection Provision-AutoGenKeys.ps1 PowerShell 스크립트를 ASP.NET Core 앱과 함께 사용되는 각 응용 프로그램 풀에 사용할 수 있습니다.For standalone, non-webfarm IIS installations, the Data Protection Provision-AutoGenKeys.ps1 PowerShell script can be used for each app pool used with an ASP.NET Core app. 이 스크립트는 앱의 앱 풀 작업자 프로세스 계정만 액세스할 수 있는 HKLM 레지스트리에 레지스트리 키를 만듭니다.This script creates a registry key in the HKLM registry that's accessible only to the worker process account of the app's app pool. 미사용 키는 컴퓨터 전체 키가 있는 DPAPI를 사용하여 암호화됩니다.Keys are encrypted at rest using DPAPI with a machine-wide key.

    웹 팜 시나리오에서는 UNC 경로를 사용하여 데이터 보호 키 링을 저장하도록 앱을 구성할 수 있습니다.In web farm scenarios, an app can be configured to use a UNC path to store its data protection key ring. 기본적으로 데이터 보호 키는 암호화되지 않습니다.By default, the data protection keys aren't encrypted. 네트워크 공유에 대한 파일 권한은 앱 실행에 사용되는 Windows 계정으로 제한되어야 합니다.Ensure that the file permissions for the network share are limited to the Windows account the app runs under. X509 인증서를 사용하여 미사용 키를 보호할 수도 있습니다.An X509 certificate can be used to protect keys at rest. 사용자가 인증서를 업로드할 수 있는 메커니즘을 사용하는 것이 좋습니다. 즉, 사용자의 신뢰할 수 있는 인증서 저장소에 인증서를 배치하고, 사용자의 앱이 실행되는 모든 머신에서 이 인증서를 사용할 수 있도록 합니다.Consider a mechanism to allow users to upload certificates: Place certificates into the user's trusted certificate store and ensure they're available on all machines where the user's app runs. 자세한 내용은 ASP.NET Core 데이터 보호 구성을 참조하세요.See Configure ASP.NET Core Data Protection for details.

  • 사용자 프로필을 로드하도록 IIS 애플리케이션 풀 구성Configure the IIS Application Pool to load the user profile

    이 설정은 앱 풀에 대한 고급 설정 아래의 프로세스 모델 섹션에 있습니다.This setting is in the Process Model section under the Advanced Settings for the app pool. 사용자 프로필True로 설정합니다.Set Load User Profile to True. True로 설정하면 키가 사용자 프로필 디렉터리에 저장되고, 사용자 계정에 관련된 키가 있는 DPAPI를 사용하여 보호됩니다.When set to True, keys are stored in the user profile directory and protected using DPAPI with a key specific to the user account. 키는 %LOCALAPPDATA%/ASP.NET/DataProtection-Keys 폴더에 저장됩니다.Keys are persisted to the %LOCALAPPDATA%/ASP.NET/DataProtection-Keys folder.

    앱 풀의 setProfileEnvironment 특성도 사용하도록 설정해야 합니다.The app pool's setProfileEnvironment attribute must also be enabled. setProfileEnvironment 의 기본값은 true입니다.The default value of setProfileEnvironment is true. Windows OS와 같은 일부 시나리오에서는 setProfileEnvironmentfalse로 설정됩니다.In some scenarios (for example, Windows OS), setProfileEnvironment is set to false. 키가 예상대로 사용자 프로필 디렉터리에 저장되지 않는 경우 다음을 수행합니다.If keys aren't stored in the user profile directory as expected:

    1. %windir%/system32/inetsrv/config 폴더로 이동합니다.Navigate to the %windir%/system32/inetsrv/config folder.
    2. applicationHost.config 파일을 엽니다.Open the applicationHost.config file.
    3. <system.applicationHost><applicationPools><applicationPoolDefaults><processModel> 요소를 찾습니다.Locate the <system.applicationHost><applicationPools><applicationPoolDefaults><processModel> element.
    4. setProfileEnvironment 특성이 존재하지 않는지 확인합니다. 존재하지 않을 경우 기본값이 true로 설정됩니다. 또는 특성 값을 명시적으로 true로 설정합니다.Confirm that the setProfileEnvironment attribute isn't present, which defaults the value to true, or explicitly set the attribute's value to true.
  • 파일 시스템을 키 링 저장소로 사용Use the file system as a key ring store

    파일 시스템을 키 링 저장소로 사용하도록 앱 코드를 조정합니다.Adjust the app code to use the file system as a key ring store. X509 인증서를 사용하여 키 링을 보호하고 신뢰할 수 있는 인증서인지 확인합니다.Use an X509 certificate to protect the key ring and ensure the certificate is a trusted certificate. 자체 서명된 인증서인 경우 신뢰할 수 있는 루트 저장소에 배치합니다.If the certificate is self-signed, place the certificate in the Trusted Root store.

    웹 팜에서 IIS를 사용하는 경우 다음을 수행합니다.When using IIS in a web farm:

    • 모든 컴퓨터에서 액세스할 수 있는 파일 공유를 사용합니다.Use a file share that all machines can access.
    • 각 시스템에 X509 인증서를 배포합니다.Deploy an X509 certificate to each machine. 코드에 데이터 보호를 구성합니다.Configure data protection in code.
  • 데이터 보호에 대한 컴퓨터 수준 정책 설정Set a machine-wide policy for data protection

    데이터 보호 시스템은 데이터 보호 API를 사용하는 모든 앱에 대한 기본 컴퓨터 수준 정책 설정을 제한적으로 지원합니다.The data protection system has limited support for setting a default machine-wide policy for all apps that consume the Data Protection APIs. 자세한 내용은 ASP.NET Core 데이터 보호를 참조하세요.For more information, see ASP.NET Core 데이터 보호.

가상 디렉터리Virtual Directories

IIS 가상 디렉터리는 ASP.NET Core 앱에서 지원되지 않습니다.IIS Virtual Directories aren't supported with ASP.NET Core apps. 앱은 하위 애플리케이션으로 호스팅될 수 있습니다.An app can be hosted as a sub-application.

하위 애플리케이션Sub-applications

ASP.NET Core 앱은 IIS 하위 애플리케이션(하위 앱)으로 호스팅될 수 있습니다.An ASP.NET Core app can be hosted as an IIS sub-application (sub-app). 하위 앱의 경로는 루트 앱 URL의 일부가 됩니다.The sub-app's path becomes part of the root app's URL.

하위 앱 내의 정적 자산 링크는 물결표-슬래시(~/) 표기법을 사용해야 합니다.Static asset links within the sub-app should use tilde-slash (~/) notation. 물결표-슬래시 표기법은 태그 도우미를 트리거하여 하위 앱의 PathBase를 렌더링된 상대 링크 앞에 추가합니다.Tilde-slash notation triggers a Tag Helper to prepend the sub-app's pathbase to the rendered relative link. /subapp_path에서 하위 앱의 경우, src="~/image.png"와 연결된 이미지가 src="/subapp_path/image.png"으로 렌더링됩니다.For a sub-app at /subapp_path, an image linked with src="~/image.png" is rendered as src="/subapp_path/image.png". 루트 앱의 정적 파일 미들웨어는 정적 파일 요청을 처리하지 않습니다.The root app's Static File Middleware doesn't process the static file request. 요청은 하위 앱의 정적 파일 미들웨어에서 처리됩니다.The request is processed by the sub-app's Static File Middleware.

정적 자산의 src 특성이 절대 경로(예: src="/image.png")로 설정된 경우 링크는 하위 앱의 PathBase 없이 렌더링됩니다.If a static asset's src attribute is set to an absolute path (for example, src="/image.png"), the link is rendered without the sub-app's pathbase. 루트 앱의 정적 파일 미들웨어는 루트 앱의 웹 루트에서 자산을 제공하려고 시도하며, 그 결과 루트 앱에서 정적 자산을 사용할 수 있지 않으면 ‘404 - 찾을 수 없음’이 발생합니다.The root app's Static File Middleware attempts to serve the asset from the root app's web root, which results in a 404 - Not Found response unless the static asset is available from the root app.

ASP.NET Core 앱을 다른 ASP.NET Core 앱에서 하위 앱으로 호스팅하려면 다음을 수행합니다.To host an ASP.NET Core app as a sub-app under another ASP.NET Core app:

  1. 하위 앱에 대한 앱 풀을 설정합니다.Establish an app pool for the sub-app. 데스크톱 CLR(.NET CLR)이 아닌 .NET Core용 CoreCLR(Core 공용 언어 런타임)이 부팅되어 작업자 프로세스의 앱을 호스트하기 때문에 .NET CLR 버전관리 코드 없음으로 설정합니다.Set the .NET CLR Version to No Managed Code because the Core Common Language Runtime (CoreCLR) for .NET Core is booted to host the app in the worker process, not the desktop CLR (.NET CLR).

  2. 루트 사이트 아래의 폴더에 하위 앱을 사용하여 IIS 관리자에 루트 사이트를 추가합니다.Add the root site in IIS Manager with the sub-app in a folder under the root site.

  3. IIS 관리자에서 하위 앱 폴더를 마우스 오른쪽 단추로 클릭하고 Convert to Application(애플리케이션으로 변환)을 선택합니다.Right-click the sub-app folder in IIS Manager and select Convert to Application.

  4. Add Application(애플리케이션 추가) 대화 상자에서 애플리케이션 풀에 대한 선택 단추를 사용하여 하위 앱에 대해 만든 앱 풀을 할당합니다.In the Add Application dialog, use the Select button for the Application Pool to assign the app pool that you created for the sub-app. 확인을 선택합니다.Select OK.

하위 앱에 대한 별도의 앱 풀 할당은 In-process 호스팅 모델을 사용할 때 필요합니다.The assignment of a separate app pool to the sub-app is a requirement when using the in-process hosting model.

In-process 호스팅 모델 및 ASP.NET Core 모듈 구성에 대한 자세한 내용은 ASP.NET Core 모듈을(를) 참조하세요.For more information on the in-process hosting model and configuring the ASP.NET Core Module, see ASP.NET Core 모듈.

web.config를 사용하여 IIS 구성Configuration of IIS with web.config

IIS 구성은 ASP.NET Core 모듈을 사용하여 ASP.NET Core 앱에 대해 작동하는 IIS 시나리오에서 web.config에 포함된 <system.webServer> 섹션의 영향을 받습니다.IIS configuration is influenced by the <system.webServer> section of web.config for IIS scenarios that are functional for ASP.NET Core apps with the ASP.NET Core Module. 예를 들어, IIS 구성은 동적 압축에 대해 작동합니다.For example, IIS configuration is functional for dynamic compression. IIS가 동적 압축을 사용하도록 서버 수준에서 구성된 경우, 앱의 web.config 파일에 포함된 <urlCompression> 요소가 ASP.NET Core 앱에 대해 이를 비활성화할 수 있습니다.If IIS is configured at the server level to use dynamic compression, the <urlCompression> element in the app's web.config file can disable it for an ASP.NET Core app.

자세한 내용은 다음 항목을 참조하세요.For more information, see the following topics:

격리된 앱 풀에서 실행되는 개별 앱에 대해 환경 변수를 설정하려면(IIS 10.0 이상에서 지원됨), IIS 참조 문서에서 환경 변수 <environmentVariables> 항목의 ‘AppCmd.exe 명령’ 섹션을 참조하세요.To set environment variables for individual apps running in isolated app pools (supported for IIS 10.0 or later), see the AppCmd.exe command section of the Environment Variables <environmentVariables> topic in the IIS reference documentation.

web.config 구성 섹션Configuration sections of web.config

web.config에 있는 ASP.NET 4.x 앱의 구성 섹션은 ASP.NET Core 앱의 구성에 사용되지 않습니다.Configuration sections of ASP.NET 4.x apps in web.config aren't used by ASP.NET Core apps for configuration:

  • <system.web>
  • <appSettings>
  • <connectionStrings>
  • <location>

ASP.NET Core 앱은 다른 구성 공급자를 사용하여 구성됩니다.ASP.NET Core apps are configured using other configuration providers. 자세한 내용은 구성을 참고하시기 바랍니다.For more information, see Configuration.

애플리케이션 풀Application Pools

앱 풀 격리는 호스팅 모델에 따라 결정됩니다.App pool isolation is determined by the hosting model:

  • In-process 호스팅: 앱은 별도의 앱 풀에서 실행해야 합니다.In-process hosting: Apps are required to run in separate app pools.
  • Out-of-process 호스팅: 각 앱을 자체 앱 풀에서 실행하여 앱을 서로 격리하는 것이 좋습니다.Out-of-process hosting: We recommend isolating the apps from each other by running each app in its own app pool.

IIS 웹 사이트 추가 대화 상자는 기본적으로 앱당 단일 앱 풀로 구성됩니다.The IIS Add Website dialog defaults to a single app pool per app. 사이트 이름을 제공하면 텍스트가 자동으로 애플리케이션 풀 텍스트 상자로 전송됩니다.When a Site name is provided, the text is automatically transferred to the Application pool textbox. 사이트를 추가할 때 이 사이트 이름을 사용하여 새로운 앱 풀이 생성됩니다.A new app pool is created using the site name when the site is added.

애플리케이션 풀 IdentityApplication Pool Identity

응용 프로그램 풀 ID 계정을 사용하면 도메인 또는 로컬 계정을 만들고 관리할 필요 없이 고유한 계정으로 앱을 실행할 수 있습니다.An app pool identity account allows an app to run under a unique account without having to create and manage domains or local accounts. IIS 8.0 이상에서 IIS WAS(관리 작업자 프로세스)는 새로운 앱 풀의 이름으로 가상 계정을 만들고, 기본적으로 이 계정으로 앱 풀의 작업자 프로세스를 실행합니다.On IIS 8.0 or later, the IIS Admin Worker Process (WAS) creates a virtual account with the name of the new app pool and runs the app pool's worker processes under this account by default. IIS 관리 콘솔의 애플리케이션 풀에 대한 고급 설정 아래에서 IdentityApplicationPoolIdentity 를 사용하도록 설정되어 있는지 확인합니다.In the IIS Management Console under Advanced Settings for the app pool, ensure that the Identity is set to use ApplicationPoolIdentity:

애플리케이션 풀 고급 설정 대화 상자

IIS 관리 프로세스는 Windows 보안 시스템에 앱 풀 이름이 포함된 보안 식별자를 만듭니다.The IIS management process creates a secure identifier with the name of the app pool in the Windows Security System. 리소스는 이 ID를 사용하여 보호할 수 있습니다.Resources can be secured using this identity. 그러나 이 ID는 실제 사용자 계정이 아니며 Windows 사용자 관리 콘솔에 표시되지 않습니다.However, this identity isn't a real user account and doesn't show up in the Windows User Management Console.

IIS 작업자 프로세스에서 앱에 대한 높은 액세스 권한이 필요한 경우 앱이 포함된 디렉터리에 대한 ACL(액세스 제어 목록)을 수정합니다.If the IIS worker process requires elevated access to the app, modify the Access Control List (ACL) for the directory containing the app:

  1. [Windows 탐색기]를 열고 해당 하위 디렉터리로 이동합니다.Open Windows Explorer and navigate to the directory.

  2. 디렉터리를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.Right-click on the directory and select Properties.

  3. 보안 탭 아래에서 편집 단추, 추가 단추를 차례로 선택합니다.Under the Security tab, select the Edit button and then the Add button.

  4. 위치 단추를 선택하고 시스템이 선택되어 있는지 확인합니다.Select the Locations button and make sure the system is selected.

  5. 선택할 개체 이름 입력 영역에 IIS AppPool\<app_pool_name> 을 입력합니다.Enter IIS AppPool\<app_pool_name> in Enter the object names to select area. 이름 확인 단추를 선택합니다.Select the Check Names button. DefaultAppPool의 경우 IIS AppPool\DefaultAppPool을 사용하는 이름을 확인합니다.For the DefaultAppPool check the names using IIS AppPool\DefaultAppPool. 이름 확인 단추를 선택하면 개체 이름 영역에 DefaultAppPool 값이 표시됩니다.When the Check Names button is selected, a value of DefaultAppPool is indicated in the object names area. 개체 이름 영역에 앱 풀 이름을 직접 입력할 수는 없습니다.It isn't possible to enter the app pool name directly into the object names area. 개체 이름을 확인할 때는 IIS AppPool\<app_pool_name> 형식을 사용합니다.Use the IIS AppPool\<app_pool_name> format when checking for the object name.

    앱 폴더에 대한 사용자 또는 그룹 선택 대화 상자: “이름 확인”을 선택하기 전에 개체 이름 영역의 “IIS AppPool"에 앱 풀 이름 “DefaultAppPool”이 추가됩니다.

  6. 확인을 선택합니다.Select OK.

    앱 폴더에 대한 사용자 또는 그룹 선택 대화 상자: “이름 확인”을 선택하면 개체 이름 영역에 개체 이름 “DefaultAppPool”이 표시됩니다.

  7. 읽기 및 실행 권한은 기본적으로 부여됩니다.Read & execute permissions should be granted by default. 필요에 따라 추가 권한을 제공합니다.Provide additional permissions as needed.

ICACLS 도구를 사용하여 명령 프롬프트에서 액세스 권한을 부여할 수도 있습니다.Access can also be granted at a command prompt using the ICACLS tool. DefaultAppPool을 예로 들면, 다음 명령이 사용됩니다.Using the DefaultAppPool as an example, the following command is used:

ICACLS C:\sites\MyWebApp /grant "IIS AppPool\DefaultAppPool":F

자세한 내용은 icacls 항목을 참조하세요.For more information, see the icacls topic.

HTTP/2 지원HTTP/2 support

HTTP/2는 다음과 같은 IIS 배포 시나리오에서 ASP.NET Core를 통해 지원됩니다.HTTP/2 is supported with ASP.NET Core in the following IIS deployment scenarios:

  • In-ProcessIn-process
    • Windows Server 2016/Windows 10 이상, IIS 10 이상Windows Server 2016/Windows 10 or later; IIS 10 or later
    • TLS 1.2 이상 연결TLS 1.2 or later connection
  • Out of ProcessOut-of-process
    • Windows Server 2016/Windows 10 이상, IIS 10 이상Windows Server 2016/Windows 10 or later; IIS 10 or later
    • 공용 에지 서버 연결은 HTTP/2를 사용하지만 Kestrel 서버에 대한 역방향 프록시 연결은 HTTP/1.1을 사용합니다.Public-facing edge server connections use HTTP/2, but the reverse proxy connection to the Kestrel server uses HTTP/1.1.
    • TLS 1.2 이상 연결TLS 1.2 or later connection

In-Process 배포에서 HTTP/2 연결이 설정된 경우 HttpRequest.Protocol에서 HTTP/2를 보고합니다.For an in-process deployment when an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/2. Out of Process 배포에서 HTTP/2 연결이 설정된 경우 HttpRequest.Protocol에서 HTTP/1.1을 보고합니다.For an out-of-process deployment when an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/1.1.

In-process 및 out-of-process 호스팅 모델에 대한 자세한 내용은 ASP.NET Core 모듈을 참조하세요.For more information on the in-process and out-of-process hosting models, see ASP.NET Core 모듈.

HTTP/2는 기본적으로 사용됩니다.HTTP/2 is enabled by default. HTTP/2 연결이 설정되지 않은 경우 연결이 HTTP/1.1로 대체됩니다.Connections fall back to HTTP/1.1 if an HTTP/2 connection isn't established. IIS 배포가 포함된 HTTP/2 구성에 대한 자세한 내용은 IIS의 HTTP/2를 참조하세요.For more information on HTTP/2 configuration with IIS deployments, see HTTP/2 on IIS.

CORS 실행 전 요청CORS preflight requests

이 섹션은 .NET Framework를 대상으로 하는 ASP.NET Core 앱에만 적용됩니다.This section only applies to ASP.NET Core apps that target the .NET Framework.

.NET Framework를 대상으로 하는 ASP.NET Core 앱의 경우 OPTIONS 요청은 IIS에서 기본적으로 앱에 전달되지 않습니다.For an ASP.NET Core app that targets the .NET Framework, OPTIONS requests aren't passed to the app by default in IIS. OPTIONS 요청을 전달하도록 web.config에서 앱의 IIS 처리기를 구성하는 방법을 알아보려면 ASP.NET Web API 2에서 원본 간 요청을 사용하도록 설정: CORS 작동 방식을 참조하세요.To learn how to configure the app's IIS handlers in web.config to pass OPTIONS requests, see Enable cross-origin requests in ASP.NET Web API 2: How CORS Works.

애플리케이션 초기화 모듈 및 유휴 시간 제한Application Initialization Module and Idle Timeout

ASP.NET Core 모듈 버전 2에서 IIS에 호스트된 경우When hosted in IIS by the ASP.NET Core Module version 2:

애플리케이션 초기화 모듈Application Initialization Module

‘앱 호스팅 In Process 및 Out of Process에 적용됩니다.’Applies to apps hosted in-process and out-of-process.

IIS 애플리케이션 초기화는 앱 풀이 시작되거나 재활용될 때 HTTP 요청을 앱으로 보내는 IIS 기능입니다.IIS Application Initialization is an IIS feature that sends an HTTP request to the app when the app pool starts or is recycled. 요청은 앱이 시작되도록 트리거합니다.The request triggers the app to start. 기본적으로 IIS는 앱의 루트 URL(/)에 요청을 실행하여 앱을 초기화합니다(구성에 대한 자세한 내용은 추가 리소스 참조).By default, IIS issues a request to the app's root URL (/) to initialize the app (see the additional resources for more details on configuration).

IIS 애플리케이션 초기화 역할 기능이 사용하도록 설정되었는지 확인합니다.Confirm that the IIS Application Initialization role feature in enabled:

Windows 7 이상 데스크톱 시스템에서 IIS를 로컬로 사용하는 경우On Windows 7 or later desktop systems when using IIS locally:

  1. 제어판 > 프로그램 > 프로그램 및 기능 > Windows 기능 사용/사용 안 함(화면 왼쪽)으로 차례로 이동합니다.Navigate to Control Panel > Programs > Programs and Features > Turn Windows features on or off (left side of the screen).
  2. 인터넷 정보 서비스 > World Wide Web 서비스 > 애플리케이션 개발 기능을 엽니다.Open Internet Information Services > World Wide Web Services > Application Development Features.
  3. 애플리케이션 초기화 확인란을 선택합니다.Select the check box for Application Initialization.

Windows Server 2008 R2 이상On Windows Server 2008 R2 or later:

  1. 역할 및 기능 추가 마법사를 엽니다.Open the Add Roles and Features Wizard.
  2. 역할 서비스 선택 패널에서 애플리케이션 개발 노드를 엽니다.In the Select role services panel, open the Application Development node.
  3. 애플리케이션 초기화 확인란을 선택합니다.Select the check box for Application Initialization.

다음 방법 중 하나를 사용하여 사이트에 대해 애플리케이션 초기화 모듈을 활성화합니다.Use either of the following approaches to enable the Application Initialization Module for the site:

  • IIS 관리자 사용Using IIS Manager:

    1. 연결 패널에서 애플리케이션 풀을 선택합니다.Select Application Pools in the Connections panel.
    2. 목록에서 앱의 앱 풀을 마우스 오른쪽 단추로 클릭하고 고급 설정을 선택합니다.Right-click the app's app pool in the list and select Advanced Settings.
    3. 기본 시작 모드OnDemand입니다.The default Start Mode is OnDemand. 시작 모드AlwaysRunning으로 설정합니다.Set the Start Mode to AlwaysRunning. 확인을 선택합니다.Select OK.
    4. 연결 패널에서 사이트 노드를 엽니다.Open the Sites node in the Connections panel.
    5. 앱을 마우스 오른쪽 단추로 클릭하고 웹 사이트 관리 > 고급 설정을 선택합니다.Right-click the app and select Manage Website > Advanced Settings.
    6. 기본 미리 로드 사용 설정은 False입니다.The default Preload Enabled setting is False. 미리 로드 사용True로 설정합니다.Set Preload Enabled to True. 확인을 선택합니다.Select OK.
  • web.config를 사용하여 doAppInitAfterRestarttrue로 설정된 <applicationInitialization> 요소를 앱의 web.config 파일에 있는 <system.webServer> 요소에 추가합니다.Using web.config, add the <applicationInitialization> element with doAppInitAfterRestart set to true to the <system.webServer> elements in the app's web.config file:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <location path="." inheritInChildApplications="false">
        <system.webServer>
          <applicationInitialization doAppInitAfterRestart="true" />
        </system.webServer>
      </location>
    </configuration>
    

유휴 시간 제한Idle Timeout

‘앱 호스팅 In Process 에만 적용됩니다.’Only applies to apps hosted in-process.

앱의 유휴 상태를 방지하려면 IIS 관리자를 사용하여 앱 풀의 유휴 시간 제한을 설정합니다.To prevent the app from idling, set the app pool's idle timeout using IIS Manager:

  1. 연결 패널에서 애플리케이션 풀을 선택합니다.Select Application Pools in the Connections panel.
  2. 목록에서 앱의 앱 풀을 마우스 오른쪽 단추로 클릭하고 고급 설정을 선택합니다.Right-click the app's app pool in the list and select Advanced Settings.
  3. 기본 유휴 시간 제한(분)20분입니다.The default Idle Time-out (minutes) is 20 minutes. 유휴 시간 제한(분)0으로 설정합니다.Set the Idle Time-out (minutes) to 0 (zero). 확인을 선택합니다.Select OK.
  4. 작업자 프로세스를 재순환합니다.Recycle the worker process.

앱 호스팅 Out of Process가 시간 초과되지 않도록 하려면 다음 방법 중 하나를 사용합니다.To prevent apps hosted out-of-process from timing out, use either of the following approaches:

애플리케이션 초기화 모듈 및 유휴 시간 제한 추가 리소스Application Initialization Module and Idle Timeout additional resources

IIS 관리자를 위한 배포 리소스Deployment resources for IIS administrators

추가 자료Additional resources

IIS 서버에 ASP.NET Core 앱을 게시하는 방법에 대한 자습서 경험은 IIS에 ASP.NET Core 앱 게시을(를) 참조하세요.For a tutorial experience on publishing an ASP.NET Core app to an IIS server, see IIS에 ASP.NET Core 앱 게시.

.NET Core 호스팅 번들 설치Install the .NET Core Hosting Bundle

지원되는 운영 체제Supported operating systems

지원되는 운영 체제는 다음과 같습니다.The following operating systems are supported:

  • Windows 7 이상Windows 7 or later
  • Windows Server 2008 R2 이상Windows Server 2008 R2 or later

HTTP.sys 서버(이전의 WebListener)는 IIS를 사용하는 역방향 프록시 구성에서 작동하지 않습니다.HTTP.sys server (formerly called WebListener) doesn't work in a reverse proxy configuration with IIS. Kestrel 서버를 사용합니다.Use the Kestrel server.

Azure에서 호스트하는 방법에 대한 자세한 내용은 Azure App Service에 ASP.NET Core 앱 배포를 참조하세요.For information on hosting in Azure, see Azure App Service에 ASP.NET Core 앱 배포.

문제 해결 지침은 ASP.NET Core 프로젝트 문제 해결 및 디버깅을 참조하십시오.For troubleshooting guidance, see ASP.NET Core 프로젝트 문제 해결 및 디버깅.

지원되는 플랫폼Supported platforms

32비트(x86) 또는 64비트(x64) 배포용으로 게시된 앱이 지원됩니다.Apps published for 32-bit (x86) or 64-bit (x64) deployment are supported. 앱이 다음과 같은 경우가 아닌 한 32비트(x86) .NET Core SDK를 포함한 32비트 앱을 배포합니다.Deploy a 32-bit app with a 32-bit (x86) .NET Core SDK unless the app:

  • 64비트 앱에 사용할 수 있는 더 큰 가상 메모리 주소 공간이 필요합니다.Requires the larger virtual memory address space available to a 64-bit app.
  • 더 큰 IIS 스택 크기가 필요합니다.Requires the larger IIS stack size.
  • 64비트 네이티브 종속성이 있습니다.Has 64-bit native dependencies.

64비트 앱을 게시하려면 64비트(x64) .NET Core SDK를 사용합니다.Use a 64-bit (x64) .NET Core SDK to publish a 64-bit app. 64비트 런타임이 호스트 시스템에 있어야 합니다.A 64-bit runtime must be present on the host system.

ASP.NET Core는 기본 플랫폼 간 HTTP 서버인 Kestrel 서버와 함께 제공됩니다.ASP.NET Core ships with Kestrel server, a default, cross-platform HTTP server.

IIS 또는 IIS Express를 사용하면 앱이 Kestrel 서버를 사용하여 IIS 작업자 프로세스와 다른 별도의 프로세스에서(Out-of-Process) 실행됩니다.When using IIS or IIS Express, the app runs in a process separate from the IIS worker process (out-of-process) with the Kestrel server.

ASP.NET Core 앱은 IIS 작업자 프로세스와 별도의 프로세스에서 실행되므로 이 모듈은 프로세스 관리를 수행합니다.Because ASP.NET Core apps run in a process separate from the IIS worker process, the module handles process management. 모듈은 첫 번째 요청이 들어올 때 ASP.NET Core 앱용 프로세스를 시작하고 종료되거나 충돌이 발생하면 앱을 다시 시작합니다.The module starts the process for the ASP.NET Core app when the first request arrives and restarts the app if it shuts down or crashes. 이는 Windows Process Activation Service(WAS)로 관리되는 In-Process로 실행되는 앱에서 볼 수 있는 동작과 기본적으로 동일합니다.This is essentially the same behavior as seen with apps that run in-process that are managed by the Windows Process Activation Service (WAS).

다음 다이어그램은 IIS, ASP.NET Core 모듈 및 Out-of-Process에 호스트된 앱 간의 관계를 보여 줍니다.The following diagram illustrates the relationship between IIS, the ASP.NET Core Module, and an app hosted out-of-process:

ASP.NET Core 모듈

요청은 웹에서 커널 모드 HTTP.sys 드라이버로 도착합니다.Requests arrive from the web to the kernel-mode HTTP.sys driver. 드라이버는 웹 사이트의 구성된 포트(일반적으로 80(HTTP) 또는 443(HTTPS))에서 IIS로 요청을 라우팅합니다.The driver routes the requests to IIS on the website's configured port, usually 80 (HTTP) or 443 (HTTPS). 모듈은 포트 80 또는 443이 아닌 앱의 임의의 포트에서 Kestrel로 요청을 전달합니다.The module forwards the requests to Kestrel on a random port for the app, which isn't port 80 or 443.

모듈은 시작 시 환경 변수를 통해 포트를 지정하고 IIS 통합 미들웨어http://localhost:{port}에서 수신 대기하도록 서버를 구성합니다.The module specifies the port via an environment variable at startup, and the IIS Integration Middleware configures the server to listen on http://localhost:{port}. 추가 검사가 수행되고 모듈에서 시작되지 않은 요청은 거부됩니다.Additional checks are performed, and requests that don't originate from the module are rejected. 모듈은 HTTPS 전달을 지원하지 않으므로 HTTPS를 통해 IIS에서 수신된 경우에도 HTTP를 통해 요청이 전달됩니다.The module doesn't support HTTPS forwarding, so requests are forwarded over HTTP even if received by IIS over HTTPS.

Kestrel이 모듈에서 요청을 선택한 후, 요청은 ASP.NET Core 미들웨어 파이프라인으로 푸시됩니다.After Kestrel picks up the request from the module, the request is pushed into the ASP.NET Core middleware pipeline. 미들웨어 파이프라인은 요청을 처리하고 앱의 논리에 HttpContext 인스턴스로 전달합니다.The middleware pipeline handles the request and passes it on as an HttpContext instance to the app's logic. IIS 통합에 의해 추가된 미들웨어는 체계, 원격 IP 및 경로 기준을 Kestrel에 요청을 전달하기 위한 계정으로 업데이트합니다.Middleware added by IIS Integration updates the scheme, remote IP, and pathbase to account for forwarding the request to Kestrel. 앱의 응답은 IIS로 다시 전달되고, 요청을 시작한 HTTP 클라이언트에 다시 푸시됩니다.The app's response is passed back to IIS, which pushes it back out to the HTTP client that initiated the request.

CreateDefaultBuilderKestrel 서버를 웹 서버로 구성하고 ASP.NET Core 모듈의 기본 경로 및 포트를 구성하여 IIS 통합을 구현합니다.CreateDefaultBuilder configures Kestrel server as the web server and enables IIS Integration by configuring the base path and port for the ASP.NET Core Module.

ASP.NET Core 모듈은 동적 포트를 생성하여 백 엔드 프로세스에 할당합니다.The ASP.NET Core Module generates a dynamic port to assign to the backend process. CreateDefaultBuilderUseIISIntegration 메서드를 호출합니다.CreateDefaultBuilder calls the UseIISIntegration method. UseIISIntegration은 localhost IP 주소(127.0.0.1)의 동적 포트에서 수신 대기하도록 Kestrel을 구성합니다.UseIISIntegration configures Kestrel to listen on the dynamic port at the localhost IP address (127.0.0.1). 동적 포트가 1234인 경우 Kestrel은 127.0.0.1:1234에서 수신 대기합니다.If the dynamic port is 1234, Kestrel listens at 127.0.0.1:1234. 이 구성은 다음에서 제공된 다른 URL 구성을 바꿉니다.This configuration replaces other URL configurations provided by:

모듈을 사용하는 경우 UseUrls 호출 또는 Kestrel의 Listen API가 필요하지 않습니다.Calls to UseUrls or Kestrel's Listen API aren't required when using the module. UseUrls 또는 Listen을 호출하는 경우 Kestrel은 IIS 없이 앱을 실행할 때만 지정된 포트에서 수신 대기합니다.If UseUrls or Listen is called, Kestrel listens on the port specified only when running the app without IIS.

ASP.NET Core 모듈 구성 지침은 ASP.NET Core 모듈을 참조하세요.For ASP.NET Core Module configuration guidance, see ASP.NET Core 모듈.

호스팅에 대한 자세한 내용은 ASP.NET Core의 호스트를 참조하세요.For more information on hosting, see Host in ASP.NET Core.

애플리케이션 구성Application configuration

IISIntegration 구성 요소 사용Enable the IISIntegration components

CreateWebHostBuilder(Program.cs)에서 호스트를 빌드하는 경우 CreateDefaultBuilder를 호출하여 IIS 통합을 사용하도록 설정합니다.When building a host in CreateWebHostBuilder (Program.cs), call CreateDefaultBuilder to enable IIS integration:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        ...

CreateDefaultBuilder에 대한 자세한 내용은 ASP.NET Core 웹 호스트를 참조하세요.For more information on CreateDefaultBuilder, see ASP.NET Core 웹 호스트.

IIS 옵션IIS options

옵션Option 기본값Default 설정Setting
AutomaticAuthentication true true인 경우 IIS 서버는 Windows 인증에 의해 인증된 HttpContext.User를 설정합니다.If true, IIS Server sets the HttpContext.User authenticated by Windows Authentication. false인 경우 서버는 HttpContext.User에 대한 ID만 제공하고, AuthenticationScheme에서 명시적으로 요청될 때 챌린지에 응답합니다.If false, the server only provides an identity for HttpContext.User and responds to challenges when explicitly requested by the AuthenticationScheme. IIS에서 Windows 인증은 AutomaticAuthentication이 작동하기 위해 사용하도록 설정되어야 합니다.Windows Authentication must be enabled in IIS for AutomaticAuthentication to function. 자세한 내용은 Windows 인증을 참조하세요.For more information, see Windows Authentication.
AuthenticationDisplayName null 로그인 페이지에서 사용자에게 나타나는 표시 이름을 설정합니다.Sets the display name shown to users on login pages.

IIS 옵션을 구성하려면 IISOptions에 대한 서비스 구성을 ConfigureServices에 포함합니다.To configure IIS options, include a service configuration for IISOptions in ConfigureServices. 다음 예에서는 앱이 HttpContext.Connection.ClientCertificate를 채우는 것을 방지합니다.The following example prevents the app from populating HttpContext.Connection.ClientCertificate:

services.Configure<IISOptions>(options => 
{
    options.ForwardClientCertificate = false;
});
옵션Option 기본값Default 설정Setting
AutomaticAuthentication true true이면 IIS 통합 미들웨어Windows 인증에 의해 인증된 HttpContext.User를 설정합니다.If true, IIS Integration Middleware sets the HttpContext.User authenticated by Windows Authentication. false이면 미들웨어가 HttpContext.User에게 ID만 제공하고, AuthenticationScheme에서 명시적으로 요청될 때 챌린지에 응답합니다.If false, the middleware only provides an identity for HttpContext.User and responds to challenges when explicitly requested by the AuthenticationScheme. IIS에서 Windows 인증은 AutomaticAuthentication이 작동하기 위해 사용하도록 설정되어야 합니다.Windows Authentication must be enabled in IIS for AutomaticAuthentication to function. 자세한 내용은 Windows 인증 항목을 참조하세요.For more information, see the Windows Authentication topic.
AuthenticationDisplayName null 로그인 페이지에서 사용자에게 나타나는 표시 이름을 설정합니다.Sets the display name shown to users on login pages.
ForwardClientCertificate true true면서 MS-ASPNETCORE-CLIENTCERT 요청 헤더가 있는 경우 HttpContext.Connection.ClientCertificate가 채워집니다.If true and the MS-ASPNETCORE-CLIENTCERT request header is present, the HttpContext.Connection.ClientCertificate is populated.

프록시 서버 및 부하 분산 장치 시나리오Proxy server and load balancer scenarios

전달된 헤더 미들웨어를 구성하는 IIS 통합 미들웨어 및 ASP.NET Core 모듈은 체계(HTTP/HTTPS) 및 요청이 시작된 원격 IP 주소를 전달하도록 구성됩니다.The IIS Integration Middleware, which configures Forwarded Headers Middleware, and the ASP.NET Core Module are configured to forward the scheme (HTTP/HTTPS) and the remote IP address where the request originated. 추가 프록시 서버 및 부하 분산 장치 외에도 호스팅되는 앱에 추가 구성이 필요할 수 있습니다.Additional configuration might be required for apps hosted behind additional proxy servers and load balancers. 자세한 내용은 프록시 서버 및 부하 분산 장치를 사용하도록 ASP.NET Core 구성을 참조하세요.For more information, see Configure ASP.NET Core to work with proxy servers and load balancers.

web.config 파일web.config file

web.config 파일은 ASP.NET Core 모듈을 구성합니다.The web.config file configures the ASP.NET Core Module. web.config 파일을 만들고, 변하고, 게시하는 작업은 프로젝트를 게시할 때 MSBuild 대상(_TransformWebConfig)에 의해 처리됩니다.Creating, transforming, and publishing the web.config file is handled by an MSBuild target (_TransformWebConfig) when the project is published. 이 대상은 웹 SDK 대상(Microsoft.NET.Sdk.Web)에 나타납니다.This target is present in the Web SDK targets (Microsoft.NET.Sdk.Web). SDK는 프로젝트 파일을 기반으로 해서 설정됩니다.The SDK is set at the top of the project file:

<Project Sdk="Microsoft.NET.Sdk.Web">

프로젝트에 web.config 파일이 없는 경우, ASP.NET Core 모듈을 구성하기 위해 올바른 processPath‘인수’ 로 파일이 생성되어 게시된 출력으로 이동됩니다.If a web.config file isn't present in the project, the file is created with the correct processPath and arguments to configure the ASP.NET Core Module and moved to published output.

프로젝트에 web.config 파일이 있는 경우, ASP.NET Core 모듈을 구성하기 위해 올바른 processPath인수로 파일이 변환되어 게시된 출력으로 이동됩니다.If a web.config file is present in the project, the file is transformed with the correct processPath and arguments to configure the ASP.NET Core Module and moved to published output. 변환은 이 파일의 IIS 구성 설정을 수정하지 않습니다.The transformation doesn't modify IIS configuration settings in the file.

web.config 파일은 활성 IIS 모듈을 제어하는 추가 IIS 구성 설정을 제공할 수 있습니다.The web.config file may provide additional IIS configuration settings that control active IIS modules. ASP.NET Core 앱을 사용하여 요청을 처리할 수 있는 IIS 모듈에 대한 자세한 내용은 IIS 모듈 항목을 참조하세요.For information on IIS modules that are capable of processing requests with ASP.NET Core apps, see the IIS modules topic.

웹 SDK가 web.config 파일을 변환하지 못하게 하려면 프로젝트 파일의 <IsTransformWebConfigDisabled> 속성을 사용합니다.To prevent the Web SDK from transforming the web.config file, use the <IsTransformWebConfigDisabled> property in the project file:

<PropertyGroup>
  <IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>

웹 SDK가 파일을 변환하지 않도록 설정하는 경우 개발자가 processPath인수를 수동으로 설정해야 합니다.When disabling the Web SDK from transforming the file, the processPath and arguments should be manually set by the developer. 자세한 내용은 ASP.NET Core 모듈를 참조하세요.For more information, see ASP.NET Core 모듈.

web.config 파일 위치web.config file location

ASP.NET Core 모듈을 올바르게 설정하려면 배포된 앱의 콘텐츠 루트 경로(일반적으로 앱 기본 경로)에 web.config 파일이 있어야 합니다.In order to set up the ASP.NET Core Module correctly, the web.config file must be present at the content root path (typically the app base path) of the deployed app. IIS에 제공되는 웹 사이트 실제 경로와 동일한 위치입니다.This is the same location as the website physical path provided to IIS. 웹 배포를 사용하여 여러 앱을 게시하도록 설정하려면 앱의 루트에 web.config 파일이 있어야 합니다.The web.config file is required at the root of the app to enable the publishing of multiple apps using Web Deploy.

중요한 파일은 <assembly>assembly>.runtimeconfig.json, <assembly>assembly>.xml(XML 문서 주석) 및 <assembly>assembly>.deps.json과 같은 앱의 실제 경로에 있습니다.Sensitive files exist on the app's physical path, such as <assembly>.runtimeconfig.json, <assembly>.xml (XML Documentation comments), and <assembly>.deps.json. web.config 파일이 있고 사이트가 정상적으로 시작되면 IIS는 요청되어도 이러한 중요한 파일을 제공하지 않습니다.When the web.config file is present and the site starts normally, IIS doesn't serve these sensitive files if they're requested. web.config 파일이 없거나, 이름이 잘못 지정되었거나, 정상적으로 시작되도록 사이트를 구성할 수 없는 경우 IIS에서 중요한 파일을 공개적으로 제공할 수도 있습니다.If the web.config file is missing, incorrectly named, or unable to configure the site for normal startup, IIS may serve sensitive files publicly.

web.config 파일이 항상 배포에 있어야 하며, 올바르게 이름이 지정되고, 정상적으로 시작되도록 사이트를 구성할 수 있어야 합니다. 프로덕션 배포에서 web.config 파일을 제거하지 마세요.The web.config file must be present in the deployment at all times, correctly named, and able to configure the site for normal start up. Never remove the web.config file from a production deployment.

web.config 변환Transform web.config

게시할 때 web.config를 변환해야 하는 경우(예: 구성, 프로필 또는 환경을 기반으로 환경 변수 설정) web.config 변환를 참조하세요.If you need to transform web.config on publish (for example, set environment variables based on the configuration, profile, or environment), see web.config 변환.

IIS 구성IIS configuration

Windows Server 운영 체제Windows Server operating systems

웹 서버(IIS) 서버 역할을 사용하도록 설정하고 역할 서비스를 설정합니다.Enable the Web Server (IIS) server role and establish role services.

  1. 관리 메뉴 또는 서버 관리자의 링크를 통해 역할 및 기능 추가 마법사를 사용합니다.Use the Add Roles and Features wizard from the Manage menu or the link in Server Manager. 서버 역할 단계에서 웹 서버(IIS) 확인란을 선택합니다.On the Server Roles step, check the box for Web Server (IIS).

    서버 역할 선택 단계에서 선택된 웹 서버 IIS 역할

  2. 기능 단계 후에는 웹 서버(IIS)에 대한 역할 서비스 단계가 로드됩니다.After the Features step, the Role services step loads for Web Server (IIS). 원하는 IIS 역할 서비스를 선택하거나 제공된 기본 역할 서비스를 적용합니다.Select the IIS role services desired or accept the default role services provided.

    역할 서비스 선택 단계에서 선택된 기본 역할 서비스

    Windows 인증(선택 사항)Windows Authentication (Optional)
    Windows 인증을 사용하도록 설정하려면 웹 서버 > 보안 노드를 확장합니다.To enable Windows Authentication, expand the following nodes: Web Server > Security. Windows 인증 기능을 선택합니다.Select the Windows Authentication feature. 자세한 내용은 Windows 인증 <windowsAuthentication>Windows 인증 구성을 참조하세요.For more information, see Windows Authentication <windowsAuthentication> and Configure Windows authentication.

    WebSockets(선택 사항)WebSockets (Optional)
    WebSockets는 ASP.NET Core 1.1 이상에서 지원됩니다.WebSockets is supported with ASP.NET Core 1.1 or later. WebSocket을 사용하도록 설정하려면 웹 서버 > 애플리케이션 개발 노드를 확장합니다.To enable WebSockets, expand the following nodes: Web Server > Application Development. WebSocket 프로토콜 기능을 선택합니다.Select the WebSocket Protocol feature. 자세한 내용은 WebSocket을 참고하시기 바랍니다.For more information, see WebSockets.

  3. 확인 단계를 진행하여 웹 서버 역할 및 서비스를 설치합니다.Proceed through the Confirmation step to install the web server role and services. 웹 서버(IIS) 역할을 설치한 후에 서버/IIS를 다시 시작할 필요는 없습니다.A server/IIS restart isn't required after installing the Web Server (IIS) role.

Windows 데스크톱 운영 체제Windows desktop operating systems

IIS 관리 콘솔World Wide Web 서비스를 사용하도록 설정합니다.Enable the IIS Management Console and World Wide Web Services.

  1. 제어판 > 프로그램 > 프로그램 및 기능 > Windows 기능 사용/사용 안 함(화면 왼쪽)으로 차례로 이동합니다.Navigate to Control Panel > Programs > Programs and Features > Turn Windows features on or off (left side of the screen).

  2. 인터넷 정보 서비스 노드를 엽니다.Open the Internet Information Services node. 웹 관리 도구 노드를 엽니다.Open the Web Management Tools node.

  3. IIS 관리 콘솔 확인란을 선택합니다.Check the box for IIS Management Console.

  4. World Wide Web 서비스 확인란을 선택합니다.Check the box for World Wide Web Services.

  5. World Wide Web 서비스의 기본 기능을 그대로 사용하거나 IIS 기능을 사용자 지정합니다.Accept the default features for World Wide Web Services or customize the IIS features.

    Windows 인증(선택 사항)Windows Authentication (Optional)
    Windows 인증을 사용하도록 설정하려면 World Wide Web 서비스 > 보안 노드를 확장합니다.To enable Windows Authentication, expand the following nodes: World Wide Web Services > Security. Windows 인증 기능을 선택합니다.Select the Windows Authentication feature. 자세한 내용은 Windows 인증 <windowsAuthentication>Windows 인증 구성을 참조하세요.For more information, see Windows Authentication <windowsAuthentication> and Configure Windows authentication.

    WebSockets(선택 사항)WebSockets (Optional)
    WebSockets는 ASP.NET Core 1.1 이상에서 지원됩니다.WebSockets is supported with ASP.NET Core 1.1 or later. WebSocket을 사용하도록 설정하려면 World Wide Web 서비스 > 애플리케이션 개발 기능 노드를 확장합니다.To enable WebSockets, expand the following nodes: World Wide Web Services > Application Development Features. WebSocket 프로토콜 기능을 선택합니다.Select the WebSocket Protocol feature. 자세한 내용은 WebSocket을 참고하시기 바랍니다.For more information, see WebSockets.

  6. IIS 설치 시 다시 시작해야 하는 경우 시스템을 다시 시작합니다.If the IIS installation requires a restart, restart the system.

Windows 기능에서 선택된 IIS 관리 콘솔 및 World Wide Web 서비스

.NET Core 호스팅 번들 설치Install the .NET Core Hosting Bundle

호스팅 시스템에 .NET Core 호스팅 번들을 설치합니다.Install the .NET Core Hosting Bundle on the hosting system. 번들은 .NET Core 런타임, .NET Core 라이브러리 및 ASP.NET Core 모듈을 설치합니다.The bundle installs the .NET Core Runtime, .NET Core Library, and the ASP.NET Core Module. 이 모듈을 통해 ASP.NET Core 앱을 IIS 배후에서 실행할 수 있습니다.The module allows ASP.NET Core apps to run behind IIS.

중요

IIS 이전에 호스팅 번들이 설치된 경우 번들 설치를 복구해야 합니다.If the Hosting Bundle is installed before IIS, the bundle installation must be repaired. IIS를 설치한 후 호스팅 번들 설치 프로그램을 다시 실행합니다.Run the Hosting Bundle installer again after installing IIS.

.NET Core의 64비트(x64) 버전을 설치한 후 호스팅 번들이 설치된 경우 SDK가 누락된 것처럼 보일 수 있습니다( .NET Core SDK가 검색되지 않음).If the Hosting Bundle is installed after installing the 64-bit (x64) version of .NET Core, SDKs might appear to be missing (No .NET Core SDKs were detected). 이 문제를 해결 하려면 ASP.NET Core 프로젝트 문제 해결 및 디버깅을 참조합니다.To resolve the problem, see ASP.NET Core 프로젝트 문제 해결 및 디버깅.

다운로드Download

  1. .NET Core 다운로드 페이지로 이동합니다.Navigate to the Download .NET Core page.
  2. 원하는 .NET Core 버전을 선택합니다.Select the desired .NET Core version.
  3. 앱 실행 - 런타임 열에서 원하는 .NET Core 런타임 버전의 행을 찾습니다.In the Run apps - Runtime column, find the row of the .NET Core runtime version desired.
  4. 호스팅 번들 링크를 사용하여 설치 관리자를 다운로드합니다.Download the installer using the Hosting Bundle link.

경고

일부 설치 관리자는 EOL(수명 종료)에 도달한 릴리스 버전을 포함하고 Microsoft에서 더 이상 지원되지 않습니다.Some installers contain release versions that have reached their end of life (EOL) and are no longer supported by Microsoft. 자세한 내용은 지원 정책을 참조하세요.For more information, see the support policy.

호스팅 번들 설치Install the Hosting Bundle

  1. 서버에서 설치 관리자를 실행합니다.Run the installer on the server. 관리자 명령 셸에서 설치 관리자를 실행할 때 다음 매개 변수를 사용할 수 있습니다.The following parameters are available when running the installer from an administrator command shell:

    • OPT_NO_ANCM=1: ASP.NET Core 모듈 설치를 건너뜁니다.OPT_NO_ANCM=1: Skip installing the ASP.NET Core Module.
    • OPT_NO_RUNTIME=1: .NET Core 런타임 설치를 건너뜁니다.OPT_NO_RUNTIME=1: Skip installing the .NET Core runtime. 서버에서 SCD(자체 포함 배포)만 호스트하는 경우에 사용됩니다.Used when the server only hosts self-contained deployments (SCD).
    • OPT_NO_SHAREDFX=1: ASP.NET 공유 프레임워크(ASP.NET 런타임) 설치를 건너뜁니다.OPT_NO_SHAREDFX=1: Skip installing the ASP.NET Shared Framework (ASP.NET runtime). 서버에서 SCD(자체 포함 배포)만 호스트하는 경우에 사용됩니다.Used when the server only hosts self-contained deployments (SCD).
    • OPT_NO_X86=1: x86 런타임 설치를 건너뜁니다.OPT_NO_X86=1: Skip installing x86 runtimes. 32비트 앱을 호스팅하지 않음을 아는 경우 이 매개 변수를 사용합니다.Use this parameter when you know that you won't be hosting 32-bit apps. 향후 32비트와 64비트 앱을 모두 호스트할 수 있는 기회가 있는 경우 이 매개 변수를 사용하지 않고 두 런타임을 모두 설치합니다.If there's any chance that you will host both 32-bit and 64-bit apps in the future, don't use this parameter and install both runtimes.
    • OPT_NO_SHARED_CONFIG_CHECK=1: 공유 구성(applicationHost.config)이 IIS 설치와 동일한 머신에 있는 경우 IIS 공유 구성 사용 선택을 해제합니다.OPT_NO_SHARED_CONFIG_CHECK=1: Disable the check for using an IIS Shared Configuration when the shared configuration (applicationHost.config) is on the same machine as the IIS installation. ASP.NET Core 2.2 이상 호스팅 번들러 설치 관리자에 대해서만 사용할 수 있습니다.Only available for ASP.NET Core 2.2 or later Hosting Bundler installers. 자세한 내용은 ASP.NET Core 모듈를 참조하세요.For more information, see ASP.NET Core 모듈.
  2. 시스템을 다시 시작하거나 명령 셸에서 다음 명령을 실행합니다.Restart the system or execute the following commands in a command shell:

    net stop was /y
    net start w3svc
    

    IIS를 다시 시작하면 설치 관리자에서 변경된 시스템 PATH(환경 변수)의 내용이 수집됩니다.Restarting IIS picks up a change to the system PATH, which is an environment variable, made by the installer.

호스팅 번들을 설치할 때 IIS에서 개별 사이트를 수동으로 중지하지 않아도 됩니다.It isn't necessary to manually stop individual sites in IIS when installing the Hosting Bundle. IIS가 다시 시작되면 호스트된 앱(IIS 사이트)이 다시 시작됩니다.Hosted apps (IIS sites) restart when IIS restarts. 앱은 애플리케이션 초기화 모듈을 포함하여 첫 번째 요청을 받으면 다시 시작됩니다.Apps start up again when they receive their first request, including from the Application Initialization Module.

ASP.NET Core에서는 공유 프레임워크 패키지의 패치 릴리스에 대한 롤포워드 동작을 채택합니다.ASP.NET Core adopts roll-forward behavior for patch releases of shared framework packages. IIS에서 호스트된 앱이 IIS를 통해 다시 시작되는 경우 앱은 첫 번째 요청을 받을 때 참조된 패키지의 최신 패치 릴리스와 함께 로드됩니다.When apps hosted by IIS restart with IIS, the apps load with the latest patch releases of their referenced packages when they receive their first request. IIS를 다시 시작하지 않으면 작업자 프로세스가 재생되고 첫 번째 요청을 받을 때 앱이 다시 시작되고 롤포워드 동작을 나타냅니다.If IIS isn't restarted, apps restart and exhibit roll-forward behavior when their worker processes are recycled and they receive their first request.

참고

IIS 공유 구성에 대한 자세한 내용은 IIS 공유 구성을 사용하는 ASP.NET Core 모듈을 참조하세요.For information on IIS Shared Configuration, see ASP.NET Core Module with IIS Shared Configuration.

Visual Studio을 사용하여 게시할 때 웹 배포 설치Install Web Deploy when publishing with Visual Studio

웹 배포를 사용하여 앱을 서버에 배포하는 경우 최신 버전의 웹 배포를 서버에 설치합니다.When deploying apps to servers with Web Deploy, install the latest version of Web Deploy on the server. 웹 배포를 설치하려면 WebPI(웹 플랫폼 설치 관리자)를 사용하거나 Microsoft 다운로드 센터에서 직접 설치 관리자를 가져옵니다.To install Web Deploy, use the Web Platform Installer (WebPI) or obtain an installer directly from the Microsoft Download Center. WebPI를 사용하는 것이 좋습니다.The preferred method is to use WebPI. WebPI는 호스팅 공급자에 대한 독립 실행형 설치 및 구성을 제공합니다.WebPI offers a standalone setup and a configuration for hosting providers.

IIS 사이트 만들기Create the IIS site

  1. 호스팅 시스템에서 앱의 게시된 폴더 및 파일을 포함할 폴더를 만듭니다.On the hosting system, create a folder to contain the app's published folders and files. 다음 단계에서는 폴더의 경로가 앱의 실제 경로로 IIS에 제공됩니다.In a following step, the folder's path is provided to IIS as the physical path to the app. 앱의 배포 폴더 및 파일 레이아웃에 대한 자세한 내용은 ASP.NET Core 디렉터리 구조를 참조하세요.For more information on an app's deployment folder and file layout, see ASP.NET Core 디렉터리 구조.

  2. IIS 관리자의 연결 패널에서 서버 노드를 엽니다.In IIS Manager, open the server's node in the Connections panel. 사이트 폴더를 마우스 오른쪽 단추로 클릭합니다.Right-click the Sites folder. 상황에 맞는 메뉴에서 웹 사이트 추가를 선택합니다.Select Add Website from the contextual menu.

  3. 사이트 이름을 제공하고 실제 경로를 앱의 배포 폴더로 설정합니다.Provide a Site name and set the Physical path to the app's deployment folder. 바인딩 구성을 제공하고 확인을 선택하여 웹 사이트를 만듭니다.Provide the Binding configuration and create the website by selecting OK:

    [웹 사이트 추가] 단계에서 사이트 이름, 실제 경로 및 호스트 이름을 제공합니다.

    경고

    최상위 와일드카드 바인딩(http://*:80/http://+:80)을 사용하지 않아야 합니다.Top-level wildcard bindings (http://*:80/ and http://+:80) should not be used. 최상위 와일드카드 바인딩은 보안 취약점에 앱을 노출시킬 수 있습니다.Top-level wildcard bindings can open up your app to security vulnerabilities. 강력한 와일드카드와 약한 와일드카드 모두에 적용됩니다.This applies to both strong and weak wildcards. 와일드카드보다는 명시적 호스트 이름을 사용합니다.Use explicit host names rather than wildcards. 전체 부모 도메인을 제어하는 경우 하위 도메인 와일드카드 바인딩(예: *.mysub.com)에는 이러한 보안 위험이 없습니다(취약한 *.com과 반대임).Subdomain wildcard binding (for example, *.mysub.com) doesn't have this security risk if you control the entire parent domain (as opposed to *.com, which is vulnerable). 자세한 내용은 rfc7230 섹션-5.4를 참조하세요.See rfc7230 section-5.4 for more information.

  4. 서버 노드에서 애플리케이션 풀을 선택합니다.Under the server's node, select Application Pools.

  5. 사이트의 앱 풀을 마우스 오른쪽 단추로 클릭하고 상황에 맞는 메뉴에서 기본 설정을 선택합니다.Right-click the site's app pool and select Basic Settings from the contextual menu.

  6. 애플리케이션 풀 편집 창에서 .NET CLR 버전관리 코드 없음으로 설정합니다.In the Edit Application Pool window, set the .NET CLR version to No Managed Code:

    .NET CLR 버전에 대해 관리 코드 없음 설정

    ASP.NET Core는 별도의 프로세스에서 실행되며 런타임을 관리합니다.ASP.NET Core runs in a separate process and manages the runtime. ASP.NET Core는 데스크톱 CLR(.NET CLR) 로드에 관계없이 실행됩니다. .NET Core용 CoreCLR(Core 공용 언어 런타임)이 부팅되어 작업자 프로세스의 앱을 호스트합니다.ASP.NET Core doesn't rely on loading the desktop CLR (.NET CLR)—the Core Common Language Runtime (CoreCLR) for .NET Core is booted to host the app in the worker process. .NET CLR 버전관리 코드 없음으로 설정하는 것은 선택 사항이지만 권장됩니다.Setting the .NET CLR version to No Managed Code is optional but recommended.

  7. ASP.NET Core 2.2 이상: In-process 호스팅 모델을 사용하는 64비트(x64) 자체 포함된 배포의 경우 32비트(x86) 프로세스에 대해 앱 풀을 사용하지 않도록 설정합니다.ASP.NET Core 2.2 or later: For a 64-bit (x64) self-contained deployment that uses the in-process hosting model, disable the app pool for 32-bit (x86) processes.

    IIS 관리자의 애플리케이션 풀에 있는 작업 사이드바에서 애플리케이션 풀 기본값 설정 또는 고급 설정을 선택합니다.In the Actions sidebar of IIS Manager > Application Pools, select Set Application Pool Defaults or Advanced Settings. 32비트 애플리케이션 사용을 찾아 값을 False로 설정합니다.Locate Enable 32-Bit Applications and set the value to False. 이 설정은 독립 프로세스 호스팅에 배포된 앱에 영향을 주지 않습니다.This setting doesn't affect apps deployed for out-of-process hosting.

  8. 프로세스 모델 ID에 적절한 권한이 있는지 확인합니다.Confirm the process model identity has the proper permissions.

    애플리케이션 풀의 기본 ID(프로세스 모델 > Identity )가 ApplicationPoolIdentity 에서 다른 ID로 변경되면, 새 ID에 앱의 폴더, 데이터베이스 및 기타 필요한 리소스에 액세스하는 데 필요한 권한이 있는지 확인합니다.If the default identity of the app pool (Process Model > Identity) is changed from ApplicationPoolIdentity to another identity, verify that the new identity has the required permissions to access the app's folder, database, and other required resources. 예를 들어 앱 풀에는 앱이 파일을 읽고 쓰는 폴더에 대한 읽기 및 쓰기 권한이 필요합니다.For example, the app pool requires read and write access to folders where the app reads and writes files.

Windows 인증 구성(선택 사항)Windows Authentication configuration (Optional)
자세한 내용은 Windows 인증 구성을 참조하세요.For more information, see Configure Windows authentication.

앱 배포Deploy the app

IIS 사이트 만들기 섹션에서 설정한 IIS 실제 경로 폴더에 앱을 배포합니다.Deploy the app to the IIS Physical path folder that was established in the Create the IIS site section. 웹 배포는 배포를 위해 권장되는 메커니즘이지만, 프로젝트의 게시 폴더에서 호스팅 시스템의 배포 폴더로 앱을 이동하기 위한 옵션에는 여러 가지가 있습니다.Web Deploy is the recommended mechanism for deployment, but several options exist for moving the app from the project's publish folder to the hosting system's deployment folder.

Visual Studio를 사용한 웹 배포Web Deploy with Visual Studio

웹 배포에서 사용할 게시 프로필을 만드는 방법은 ASP.NET Core 앱 배포용 Visual Studio 게시 프로필 항목을 참조하세요.See the Visual Studio publish profiles for ASP.NET Core app deployment topic to learn how to create a publish profile for use with Web Deploy. 호스팅 공급자가 게시 프로필을 제공하거나 게시 프로필을 만들 수 있도록 지원하는 경우 해당 프로필을 다운로드하고 Visual Studio 게시 대화 상자를 사용하여 가져옵니다.If the hosting provider provides a Publish Profile or support for creating one, download their profile and import it using the Visual Studio Publish dialog:

게시 대화 상자 페이지

Visual Studio 외부에서 웹 배포Web Deploy outside of Visual Studio

웹 배포는 Visual Studio 외부에서 명령줄을 통해 사용할 수도 있습니다.Web Deploy can also be used outside of Visual Studio from the command line. 자세한 내용은 웹 배포 도구를 참조하세요.For more information, see Web Deployment Tool.

웹 배포에 대한 대안Alternatives to Web Deploy

수동 복사, Xcopy, Robocopy, PowerShell 등의 여러 방법 중 하나를 사용하여 앱을 호스팅 시스템으로 이동합니다.Use any of several methods to move the app to the hosting system, such as manual copy, Xcopy, Robocopy, or PowerShell.

IIS에 ASP.NET Core 배포에 대한 자세한 내용은 IIS 관리자를 위한 배포 리소스 섹션을 참조하세요.For more information on ASP.NET Core deployment to IIS, see the Deployment resources for IIS administrators section.

웹 사이트 찾아보기Browse the website

앱이 호스팅 시스템에 배포된 후 앱의 공용 엔드포인트 중 하나에 요청합니다.After the app is deployed to the hosting system, make a request to one of the app's public endpoints.

다음 예제에서는 포트 80에서 사이트가 www.mysite.com의 IIS 호스트 이름에 바인딩됩니다.In the following example, the site is bound to an IIS Host name of www.mysite.com on Port 80. http://www.mysite.com에 대해 요청이 이루어졌습니다.A request is made to http://www.mysite.com:

IIS 시작 페이지가 로드된 Microsoft Edge 브라우저

배포 파일이 잠겨 있음Locked deployment files

앱이 실행 중이면 배포 폴더의 파일이 잠겨 있습니다.Files in the deployment folder are locked when the app is running. 잠긴 파일은 배포 중에 덮어쓸 수 없습니다.Locked files can't be overwritten during deployment. 배포에서 잠긴 파일을 해제하려면 다음 방법 중 하나를 사용하여 앱 풀을 중지합니다.To release locked files in a deployment, stop the app pool using one of the following approaches:

  • 웹 배포를 사용하고 프로젝트 파일에서 Microsoft.NET.Sdk.Web을 참조합니다.Use Web Deploy and reference Microsoft.NET.Sdk.Web in the project file. app_offline.htm 파일은 웹앱 디렉터리의 루트에 배치됩니다.An app_offline.htm file is placed at the root of the web app directory. 파일이 있는 경우 ASP.NET Core 모듈은 앱을 정상적으로 종료하고, 배포하는 동안 app_offline.htm 파일을 제공합니다.When the file is present, the ASP.NET Core Module gracefully shuts down the app and serves the app_offline.htm file during the deployment. 자세한 내용은 ASP.NET Core 모듈 구성 참조를 참조하세요.For more information, see the ASP.NET Core Module configuration reference.

  • 서버의 IIS 관리자에서 앱 풀을 수동으로 중지합니다.Manually stop the app pool in the IIS Manager on the server.

  • PowerShell을 사용하여 app_offline.htm을 삭제합니다(PowerShell 5 이상 필요).Use PowerShell to drop app_offline.htm (requires PowerShell 5 or later):

    $pathToApp = 'PATH_TO_APP'
    
    # Stop the AppPool
    New-Item -Path $pathToApp app_offline.htm
    
    # Provide script commands here to deploy the app
    
    # Restart the AppPool
    Remove-Item -Path $pathToApp app_offline.htm
    
    

데이터 보호Data protection

ASP.NET Core 데이터 보호 스택은 인증에 사용되는 미들웨어를 포함하여 여러 ASP.NET Core 미들웨어에서 사용됩니다.The ASP.NET Core Data Protection stack is used by several ASP.NET Core middlewares, including middleware used in authentication. 사용자 코드에서 데이터 보호 API가 호출되지 않더라도 배포 스크립트 또는 사용자 코드를 통해 영구적 암호화 키 저장소를 만들도록 데이터 보호를 구성해야 합니다.Even if Data Protection APIs aren't called by user code, data protection should be configured with a deployment script or in user code to create a persistent cryptographic key store. 데이터 보호를 구성하지 않으면 키는 메모리에 보관되고 앱이 다시 시작되면 삭제됩니다.If data protection isn't configured, the keys are held in memory and discarded when the app restarts.

키 링이 메모리에 저장된 경우 앱을 다시 시작하면 다음과 같이 됩니다.If the key ring is stored in memory when the app restarts:

  • 모든 cookie 기반 인증 토큰이 무효화됩니다.All cookie-based authentication tokens are invalidated.
  • 사용자는 다음 요청에서 다시 로그인해야 합니다.Users are required to sign in again on their next request.
  • 키 링으로 보호된 데이터의 암호를 더 이상 해독할 수 없습니다.Any data protected with the key ring can no longer be decrypted. 여기에는 CSRF 토큰ASP.NET Core MVC TempData cookie가 포함될 수 있습니다.This may include CSRF tokens and ASP.NET Core MVC TempData cookies.

IIS에서 키 링을 저장하도록 데이터 보호를 구성하려면 다음 방법 중 하나를 사용합니다.To configure data protection under IIS to persist the key ring, use one of the following approaches:

  • 데이터 보호 레지스트리키 만들기Create Data Protection Registry Keys

    ASP.NET 앱에서 사용되는 데이터 보호 키는 앱 외부의 레지스트리에 저장됩니다.Data protection keys used by ASP.NET Core apps are stored in the registry external to the apps. 지정된 앱의 키를 저장하려면 앱 풀에 대한 레지스트리 키를 만듭니다.To persist the keys for a given app, create registry keys for the app pool.

    WebFarm이 아닌 독립 실행형 IIS 설치의 경우 Data Protection Provision-AutoGenKeys.ps1 PowerShell 스크립트를 ASP.NET Core 앱과 함께 사용되는 각 응용 프로그램 풀에 사용할 수 있습니다.For standalone, non-webfarm IIS installations, the Data Protection Provision-AutoGenKeys.ps1 PowerShell script can be used for each app pool used with an ASP.NET Core app. 이 스크립트는 앱의 앱 풀 작업자 프로세스 계정만 액세스할 수 있는 HKLM 레지스트리에 레지스트리 키를 만듭니다.This script creates a registry key in the HKLM registry that's accessible only to the worker process account of the app's app pool. 미사용 키는 컴퓨터 전체 키가 있는 DPAPI를 사용하여 암호화됩니다.Keys are encrypted at rest using DPAPI with a machine-wide key.

    웹 팜 시나리오에서는 UNC 경로를 사용하여 데이터 보호 키 링을 저장하도록 앱을 구성할 수 있습니다.In web farm scenarios, an app can be configured to use a UNC path to store its data protection key ring. 기본적으로 데이터 보호 키는 암호화되지 않습니다.By default, the data protection keys aren't encrypted. 네트워크 공유에 대한 파일 권한은 앱 실행에 사용되는 Windows 계정으로 제한되어야 합니다.Ensure that the file permissions for the network share are limited to the Windows account the app runs under. X509 인증서를 사용하여 미사용 키를 보호할 수도 있습니다.An X509 certificate can be used to protect keys at rest. 사용자가 인증서를 업로드할 수 있는 메커니즘을 사용하는 것이 좋습니다. 즉, 사용자의 신뢰할 수 있는 인증서 저장소에 인증서를 배치하고, 사용자의 앱이 실행되는 모든 머신에서 이 인증서를 사용할 수 있도록 합니다.Consider a mechanism to allow users to upload certificates: Place certificates into the user's trusted certificate store and ensure they're available on all machines where the user's app runs. 자세한 내용은 ASP.NET Core 데이터 보호 구성을 참조하세요.See Configure ASP.NET Core Data Protection for details.

  • 사용자 프로필을 로드하도록 IIS 애플리케이션 풀 구성Configure the IIS Application Pool to load the user profile

    이 설정은 앱 풀에 대한 고급 설정 아래의 프로세스 모델 섹션에 있습니다.This setting is in the Process Model section under the Advanced Settings for the app pool. 사용자 프로필True로 설정합니다.Set Load User Profile to True. True로 설정하면 키가 사용자 프로필 디렉터리에 저장되고, 사용자 계정에 관련된 키가 있는 DPAPI를 사용하여 보호됩니다.When set to True, keys are stored in the user profile directory and protected using DPAPI with a key specific to the user account. 키는 %LOCALAPPDATA%/ASP.NET/DataProtection-Keys 폴더에 저장됩니다.Keys are persisted to the %LOCALAPPDATA%/ASP.NET/DataProtection-Keys folder.

    앱 풀의 setProfileEnvironment 특성도 사용하도록 설정해야 합니다.The app pool's setProfileEnvironment attribute must also be enabled. setProfileEnvironment 의 기본값은 true입니다.The default value of setProfileEnvironment is true. Windows OS와 같은 일부 시나리오에서는 setProfileEnvironmentfalse로 설정됩니다.In some scenarios (for example, Windows OS), setProfileEnvironment is set to false. 키가 예상대로 사용자 프로필 디렉터리에 저장되지 않는 경우 다음을 수행합니다.If keys aren't stored in the user profile directory as expected:

    1. %windir%/system32/inetsrv/config 폴더로 이동합니다.Navigate to the %windir%/system32/inetsrv/config folder.
    2. applicationHost.config 파일을 엽니다.Open the applicationHost.config file.
    3. <system.applicationHost><applicationPools><applicationPoolDefaults><processModel> 요소를 찾습니다.Locate the <system.applicationHost><applicationPools><applicationPoolDefaults><processModel> element.
    4. setProfileEnvironment 특성이 존재하지 않는지 확인합니다. 존재하지 않을 경우 기본값이 true로 설정됩니다. 또는 특성 값을 명시적으로 true로 설정합니다.Confirm that the setProfileEnvironment attribute isn't present, which defaults the value to true, or explicitly set the attribute's value to true.
  • 파일 시스템을 키 링 저장소로 사용Use the file system as a key ring store

    파일 시스템을 키 링 저장소로 사용하도록 앱 코드를 조정합니다.Adjust the app code to use the file system as a key ring store. X509 인증서를 사용하여 키 링을 보호하고 신뢰할 수 있는 인증서인지 확인합니다.Use an X509 certificate to protect the key ring and ensure the certificate is a trusted certificate. 자체 서명된 인증서인 경우 신뢰할 수 있는 루트 저장소에 배치합니다.If the certificate is self-signed, place the certificate in the Trusted Root store.

    웹 팜에서 IIS를 사용하는 경우 다음을 수행합니다.When using IIS in a web farm:

    • 모든 컴퓨터에서 액세스할 수 있는 파일 공유를 사용합니다.Use a file share that all machines can access.
    • 각 시스템에 X509 인증서를 배포합니다.Deploy an X509 certificate to each machine. 코드에 데이터 보호를 구성합니다.Configure data protection in code.
  • 데이터 보호에 대한 컴퓨터 수준 정책 설정Set a machine-wide policy for data protection

    데이터 보호 시스템은 데이터 보호 API를 사용하는 모든 앱에 대한 기본 컴퓨터 수준 정책 설정을 제한적으로 지원합니다.The data protection system has limited support for setting a default machine-wide policy for all apps that consume the Data Protection APIs. 자세한 내용은 ASP.NET Core 데이터 보호를 참조하세요.For more information, see ASP.NET Core 데이터 보호.

가상 디렉터리Virtual Directories

IIS 가상 디렉터리는 ASP.NET Core 앱에서 지원되지 않습니다.IIS Virtual Directories aren't supported with ASP.NET Core apps. 앱은 하위 애플리케이션으로 호스팅될 수 있습니다.An app can be hosted as a sub-application.

하위 애플리케이션Sub-applications

ASP.NET Core 앱은 IIS 하위 애플리케이션(하위 앱)으로 호스팅될 수 있습니다.An ASP.NET Core app can be hosted as an IIS sub-application (sub-app). 하위 앱의 경로는 루트 앱 URL의 일부가 됩니다.The sub-app's path becomes part of the root app's URL.

하위 앱에는 ASP.NET Core 모듈이 처리기로 포함되지 않아야 합니다.A sub-app shouldn't include the ASP.NET Core Module as a handler. 하위 앱의 web.config 파일에 모듈이 처리기로 추가되면, 하위 앱을 찾으려고 할 때 잘못된 구성 파일을 참조하는 500.19 내부 서버 오류가 표시됩니다.If the module is added as a handler in a sub-app's web.config file, a 500.19 Internal Server Error referencing the faulty config file is received when attempting to browse the sub-app.

다음 예제에서는 ASP.NET Core 하위 앱에 대해 게시된 web.config 파일을 보여 줍니다.The following example shows a published web.config file for an ASP.NET Core sub-app:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <aspNetCore processPath="dotnet" 
      arguments=".\MyApp.dll" 
      stdoutLogEnabled="false" 
      stdoutLogFile=".\logs\stdout" />
  </system.webServer>
</configuration>

ASP.NET Core 앱 아래에 비ASP .NET Core 하위 앱을 호스팅하는 경우, 하위 앱의 web.config 파일에서 상속된 처리기를 명시적으로 제거합니다.When hosting a non-ASP.NET Core sub-app underneath an ASP.NET Core app, explicitly remove the inherited handler in the sub-app's web.config file:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <remove name="aspNetCore" />
    </handlers>
    <aspNetCore processPath="dotnet" 
      arguments=".\MyApp.dll" 
      stdoutLogEnabled="false" 
      stdoutLogFile=".\logs\stdout" />
  </system.webServer>
</configuration>

하위 앱 내의 정적 자산 링크는 물결표-슬래시(~/) 표기법을 사용해야 합니다.Static asset links within the sub-app should use tilde-slash (~/) notation. 물결표-슬래시 표기법은 태그 도우미를 트리거하여 하위 앱의 PathBase를 렌더링된 상대 링크 앞에 추가합니다.Tilde-slash notation triggers a Tag Helper to prepend the sub-app's pathbase to the rendered relative link. /subapp_path에서 하위 앱의 경우, src="~/image.png"와 연결된 이미지가 src="/subapp_path/image.png"으로 렌더링됩니다.For a sub-app at /subapp_path, an image linked with src="~/image.png" is rendered as src="/subapp_path/image.png". 루트 앱의 정적 파일 미들웨어는 정적 파일 요청을 처리하지 않습니다.The root app's Static File Middleware doesn't process the static file request. 요청은 하위 앱의 정적 파일 미들웨어에서 처리됩니다.The request is processed by the sub-app's Static File Middleware.

정적 자산의 src 특성이 절대 경로(예: src="/image.png")로 설정된 경우 링크는 하위 앱의 PathBase 없이 렌더링됩니다.If a static asset's src attribute is set to an absolute path (for example, src="/image.png"), the link is rendered without the sub-app's pathbase. 루트 앱의 정적 파일 미들웨어는 루트 앱의 웹 루트에서 자산을 제공하려고 시도하며, 그 결과 루트 앱에서 정적 자산을 사용할 수 있지 않으면 ‘404 - 찾을 수 없음’이 발생합니다.The root app's Static File Middleware attempts to serve the asset from the root app's web root, which results in a 404 - Not Found response unless the static asset is available from the root app.

ASP.NET Core 앱을 다른 ASP.NET Core 앱에서 하위 앱으로 호스팅하려면 다음을 수행합니다.To host an ASP.NET Core app as a sub-app under another ASP.NET Core app:

  1. 하위 앱에 대한 앱 풀을 설정합니다.Establish an app pool for the sub-app. 데스크톱 CLR(.NET CLR)이 아닌 .NET Core용 CoreCLR(Core 공용 언어 런타임)이 부팅되어 작업자 프로세스의 앱을 호스트하기 때문에 .NET CLR 버전관리 코드 없음으로 설정합니다.Set the .NET CLR Version to No Managed Code because the Core Common Language Runtime (CoreCLR) for .NET Core is booted to host the app in the worker process, not the desktop CLR (.NET CLR).

  2. 루트 사이트 아래의 폴더에 하위 앱을 사용하여 IIS 관리자에 루트 사이트를 추가합니다.Add the root site in IIS Manager with the sub-app in a folder under the root site.

  3. IIS 관리자에서 하위 앱 폴더를 마우스 오른쪽 단추로 클릭하고 Convert to Application(애플리케이션으로 변환)을 선택합니다.Right-click the sub-app folder in IIS Manager and select Convert to Application.

  4. Add Application(애플리케이션 추가) 대화 상자에서 애플리케이션 풀에 대한 선택 단추를 사용하여 하위 앱에 대해 만든 앱 풀을 할당합니다.In the Add Application dialog, use the Select button for the Application Pool to assign the app pool that you created for the sub-app. 확인을 선택합니다.Select OK.

하위 앱에 대한 별도의 앱 풀 할당은 In-process 호스팅 모델을 사용할 때 필요합니다.The assignment of a separate app pool to the sub-app is a requirement when using the in-process hosting model.

In-process 호스팅 모델 및 ASP.NET Core 모듈 구성에 대한 자세한 내용은 ASP.NET Core 모듈을(를) 참조하세요.For more information on the in-process hosting model and configuring the ASP.NET Core Module, see ASP.NET Core 모듈.

web.config를 사용하여 IIS 구성Configuration of IIS with web.config

IIS 구성은 ASP.NET Core 모듈을 사용하여 ASP.NET Core 앱에 대해 작동하는 IIS 시나리오에서 web.config에 포함된 <system.webServer> 섹션의 영향을 받습니다.IIS configuration is influenced by the <system.webServer> section of web.config for IIS scenarios that are functional for ASP.NET Core apps with the ASP.NET Core Module. 예를 들어, IIS 구성은 동적 압축에 대해 작동합니다.For example, IIS configuration is functional for dynamic compression. IIS가 동적 압축을 사용하도록 서버 수준에서 구성된 경우, 앱의 web.config 파일에 포함된 <urlCompression> 요소가 ASP.NET Core 앱에 대해 이를 비활성화할 수 있습니다.If IIS is configured at the server level to use dynamic compression, the <urlCompression> element in the app's web.config file can disable it for an ASP.NET Core app.

자세한 내용은 다음 항목을 참조하세요.For more information, see the following topics:

격리된 앱 풀에서 실행되는 개별 앱에 대해 환경 변수를 설정하려면(IIS 10.0 이상에서 지원됨), IIS 참조 문서에서 환경 변수 <environmentVariables> 항목의 ‘AppCmd.exe 명령’ 섹션을 참조하세요.To set environment variables for individual apps running in isolated app pools (supported for IIS 10.0 or later), see the AppCmd.exe command section of the Environment Variables <environmentVariables> topic in the IIS reference documentation.

web.config 구성 섹션Configuration sections of web.config

web.config에 있는 ASP.NET 4.x 앱의 구성 섹션은 ASP.NET Core 앱의 구성에 사용되지 않습니다.Configuration sections of ASP.NET 4.x apps in web.config aren't used by ASP.NET Core apps for configuration:

  • <system.web>
  • <appSettings>
  • <connectionStrings>
  • <location>

ASP.NET Core 앱은 다른 구성 공급자를 사용하여 구성됩니다.ASP.NET Core apps are configured using other configuration providers. 자세한 내용은 구성을 참고하시기 바랍니다.For more information, see Configuration.

애플리케이션 풀Application Pools

서버에서 여러 웹 사이트를 호스트하는 경우 각 앱을 해당 앱 풀에서 실행하여 서로 격리하는 것이 좋습니다.When hosting multiple websites on a server, we recommend isolating the apps from each other by running each app in its own app pool. 이 구성은 IIS 웹 사이트 추가 대화 상자의 기본값입니다.The IIS Add Website dialog defaults to this configuration. 사이트 이름을 제공하면 텍스트가 자동으로 애플리케이션 풀 텍스트 상자로 전송됩니다.When a Site name is provided, the text is automatically transferred to the Application pool textbox. 사이트를 추가할 때 이 사이트 이름을 사용하여 새로운 앱 풀이 생성됩니다.A new app pool is created using the site name when the site is added.

애플리케이션 풀 IdentityApplication Pool Identity

응용 프로그램 풀 ID 계정을 사용하면 도메인 또는 로컬 계정을 만들고 관리할 필요 없이 고유한 계정으로 앱을 실행할 수 있습니다.An app pool identity account allows an app to run under a unique account without having to create and manage domains or local accounts. IIS 8.0 이상에서 IIS WAS(관리 작업자 프로세스)는 새로운 앱 풀의 이름으로 가상 계정을 만들고, 기본적으로 이 계정으로 앱 풀의 작업자 프로세스를 실행합니다.On IIS 8.0 or later, the IIS Admin Worker Process (WAS) creates a virtual account with the name of the new app pool and runs the app pool's worker processes under this account by default. IIS 관리 콘솔의 애플리케이션 풀에 대한 고급 설정 아래에서 IdentityApplicationPoolIdentity 를 사용하도록 설정되어 있는지 확인합니다.In the IIS Management Console under Advanced Settings for the app pool, ensure that the Identity is set to use ApplicationPoolIdentity:

애플리케이션 풀 고급 설정 대화 상자

IIS 관리 프로세스는 Windows 보안 시스템에 앱 풀 이름이 포함된 보안 식별자를 만듭니다.The IIS management process creates a secure identifier with the name of the app pool in the Windows Security System. 리소스는 이 ID를 사용하여 보호할 수 있습니다.Resources can be secured using this identity. 그러나 이 ID는 실제 사용자 계정이 아니며 Windows 사용자 관리 콘솔에 표시되지 않습니다.However, this identity isn't a real user account and doesn't show up in the Windows User Management Console.

IIS 작업자 프로세스에서 앱에 대한 높은 액세스 권한이 필요한 경우 앱이 포함된 디렉터리에 대한 ACL(액세스 제어 목록)을 수정합니다.If the IIS worker process requires elevated access to the app, modify the Access Control List (ACL) for the directory containing the app:

  1. [Windows 탐색기]를 열고 해당 하위 디렉터리로 이동합니다.Open Windows Explorer and navigate to the directory.

  2. 디렉터리를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.Right-click on the directory and select Properties.

  3. 보안 탭 아래에서 편집 단추, 추가 단추를 차례로 선택합니다.Under the Security tab, select the Edit button and then the Add button.

  4. 위치 단추를 선택하고 시스템이 선택되어 있는지 확인합니다.Select the Locations button and make sure the system is selected.

  5. 선택할 개체 이름 입력 영역에 IIS AppPool\<app_pool_name> 을 입력합니다.Enter IIS AppPool\<app_pool_name> in Enter the object names to select area. 이름 확인 단추를 선택합니다.Select the Check Names button. DefaultAppPool의 경우 IIS AppPool\DefaultAppPool을 사용하는 이름을 확인합니다.For the DefaultAppPool check the names using IIS AppPool\DefaultAppPool. 이름 확인 단추를 선택하면 개체 이름 영역에 DefaultAppPool 값이 표시됩니다.When the Check Names button is selected, a value of DefaultAppPool is indicated in the object names area. 개체 이름 영역에 앱 풀 이름을 직접 입력할 수는 없습니다.It isn't possible to enter the app pool name directly into the object names area. 개체 이름을 확인할 때는 IIS AppPool\<app_pool_name> 형식을 사용합니다.Use the IIS AppPool\<app_pool_name> format when checking for the object name.

    앱 폴더에 대한 사용자 또는 그룹 선택 대화 상자: “이름 확인”을 선택하기 전에 개체 이름 영역의 “IIS AppPool"에 앱 풀 이름 “DefaultAppPool”이 추가됩니다.

  6. 확인을 선택합니다.Select OK.

    앱 폴더에 대한 사용자 또는 그룹 선택 대화 상자: “이름 확인”을 선택하면 개체 이름 영역에 개체 이름 “DefaultAppPool”이 표시됩니다.

  7. 읽기 및 실행 권한은 기본적으로 부여됩니다.Read & execute permissions should be granted by default. 필요에 따라 추가 권한을 제공합니다.Provide additional permissions as needed.

ICACLS 도구를 사용하여 명령 프롬프트에서 액세스 권한을 부여할 수도 있습니다.Access can also be granted at a command prompt using the ICACLS tool. DefaultAppPool을 예로 들면, 다음 명령이 사용됩니다.Using the DefaultAppPool as an example, the following command is used:

ICACLS C:\sites\MyWebApp /grant "IIS AppPool\DefaultAppPool":F

자세한 내용은 icacls 항목을 참조하세요.For more information, see the icacls topic.

HTTP/2 지원HTTP/2 support

HTTP/2는 다음 기본 요구 사항을 충족하는 Out of Process 배포에 대해 지원됩니다.HTTP/2 is supported for out-of-process deployments that meet the following base requirements:

  • Windows Server 2016/Windows 10 이상, IIS 10 이상Windows Server 2016/Windows 10 or later; IIS 10 or later
  • 공용 에지 서버 연결은 HTTP/2를 사용하지만 Kestrel 서버에 대한 역방향 프록시 연결은 HTTP/1.1을 사용합니다.Public-facing edge server connections use HTTP/2, but the reverse proxy connection to the Kestrel server uses HTTP/1.1.
  • 대상 프레임워크: HTTP/2 연결은 IIS에 의해 완전히 처리되므로 Out of Process 배포에는 해당하지 않습니다.Target framework: Not applicable to out-of-process deployments, since the HTTP/2 connection is handled entirely by IIS.
  • TLS 1.2 이상 연결TLS 1.2 or later connection

HTTP/2 연결이 설정된 경우 HttpRequest.Protocol에서 HTTP/1.1을 보고합니다.If an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/1.1.

HTTP/2는 기본적으로 사용됩니다.HTTP/2 is enabled by default. HTTP/2 연결이 설정되지 않은 경우 연결이 HTTP/1.1로 대체됩니다.Connections fall back to HTTP/1.1 if an HTTP/2 connection isn't established. IIS 배포가 포함된 HTTP/2 구성에 대한 자세한 내용은 IIS의 HTTP/2를 참조하세요.For more information on HTTP/2 configuration with IIS deployments, see HTTP/2 on IIS.

CORS 실행 전 요청CORS preflight requests

이 섹션은 .NET Framework를 대상으로 하는 ASP.NET Core 앱에만 적용됩니다.This section only applies to ASP.NET Core apps that target the .NET Framework.

.NET Framework를 대상으로 하는 ASP.NET Core 앱의 경우 OPTIONS 요청은 IIS에서 기본적으로 앱에 전달되지 않습니다.For an ASP.NET Core app that targets the .NET Framework, OPTIONS requests aren't passed to the app by default in IIS. OPTIONS 요청을 전달하도록 web.config에서 앱의 IIS 처리기를 구성하는 방법을 알아보려면 ASP.NET Web API 2에서 원본 간 요청을 사용하도록 설정: CORS 작동 방식을 참조하세요.To learn how to configure the app's IIS handlers in web.config to pass OPTIONS requests, see Enable cross-origin requests in ASP.NET Web API 2: How CORS Works.

IIS 관리자를 위한 배포 리소스Deployment resources for IIS administrators

추가 자료Additional resources