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

이 문서의 작성자: Luke LathamRick AndersonBy Luke Latham and Rick Anderson

지원되는 운영 체제Supported operating systems

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

  • Windows 7 이상Windows 7 and newer
  • Windows Server 2008 R2 이상†Windows Server 2008 R2 and newer†

†개념적으로 이 문서에서 설명하는 IIS 구성은 Nano Server IIS에서 ASP.NET Core 응용 프로그램을 호스팅하는 데에도 적용되지만 구체적인 지침은 Nano 서버에서 실행되는 IIS가 있는 ASP.NET Core를 참조하세요.†Conceptually, the IIS configuration described in this document also applies to hosting ASP.NET Core applications on Nano Server IIS, but refer to ASP.NET Core with IIS on Nano Server for specific instructions.

HTTP.sys 서버(이전에는 WebListener라고 함)는 IIS 역방향 프록시 구성에서 작동하지 않습니다.HTTP.sys server (formerly called WebListener) won't work in a reverse-proxy configuration with IIS. 이에 따라 Kestrel 서버를 사용해야 합니다.You must use the Kestrel server.

IIS 구성IIS configuration

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

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

제어판 > 프로그램 > 프로그램 및 기능 > Windows 기능 Windows 기능 사용/사용 안 함(화면 왼쪽)으로 차례로 이동합니다.Navigate to Control Panel > Programs > Programs and Features > Turn Windows features on or off (left side of the screen). 인터넷 정보 서비스웹 관리 도구 그룹을 엽니다.Open the group for Internet Information Services and Web Management Tools. IIS 관리 콘솔 확인란을 선택합니다.Check the box for IIS Management Console. World Wide Web 서비스 확인란을 선택합니다.Check the box for World Wide Web Services. World Wide Web 서비스의 기본 기능을 허용하거나 필요에 따라 IIS 기능을 사용자 지정합니다.Accept the default features for World Wide Web Services or customize the IIS features to suit your needs.

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

Windows Server 운영 체제Windows Server operating systems

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

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

역할 서비스 단계에서 원하는 IIS 역할 서비스를 선택하거나 제공된 기본 역할 서비스를 받아들입니다.On the Role services step, select the IIS role services you desire or accept the default role services provided.

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

확인 단계를 진행하여 웹 서버 역할 및 서비스를 설치합니다.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.

.NET Core Windows Server 호스팅 번들 설치Install the .NET Core Windows Server Hosting bundle

  1. 호스팅 시스템에 .NET Core Windows Server 호스팅 번들을 설치합니다.Install the .NET Core Windows Server 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. 이 모듈은 IIS와 Kestrel 서버 사이에 역방향 프록시를 만듭니다.The module creates the reverse-proxy between IIS and the Kestrel server. 시스템이 인터넷에 연결되지 않은 경우 Microsoft Visual C++ 2015 재배포 가능 패키지를 설치한 후에 .NET Core Windows Server 호스팅 번들을 설치합니다.If the system doesn't have an Internet connection, obtain and install the Microsoft Visual C++ 2015 Redistributable before installing the .NET Core Windows Server Hosting bundle.

  2. 시스템을 다시 시작하거나 명령 프롬프트에서 net stop was /y에 이어 net start w3svc를 실행하여 시스템 PATH에 대한 변경 내용을 선택합니다.Restart the system or execute net stop was /y followed by net start w3svc from a command prompt to pick up a change to the system PATH.

참고

IIS 공유 구성을 사용하는 경우 IIS 공유 구성을 사용하는 ASP.NET Core 모듈을 참조하세요.If you use an IIS Shared Configuration, see ASP.NET Core Module with IIS Shared Configuration.

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

Visual Studio에서 웹 배포를 사용하여 응용 프로그램을 배포하려는 경우 호스팅 시스템에 최신 버전의 웹 배포를 설치합니다.If you intend to deploy your applications with Web Deploy in Visual Studio, install the latest version of Web Deploy on the hosting system. 웹 배포를 설치하려면 WebPI(웹 플랫폼 설치 관리자)를 사용하거나 Microsoft 다운로드 센터에서 설치 관리자를 직접 구할 수 있습니다.To install Web Deploy, you can 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.

응용 프로그램 구성Application configuration

IISIntegration 구성 요소 사용Enabling the IISIntegration components

일반적인 Program.csCreateDefaultBuilder를 호출하여 호스트 설정을 시작합니다.A typical Program.cs calls CreateDefaultBuilder to begin setting up a host. CreateDefaultBuilderKestrel을 웹 서버로 구성하고 ASP.NET Core 모듈의 기본 경로 및 포트를 구성하여 IIS 통합을 구현합니다.CreateDefaultBuilder configures Kestrel as the web server and enables IIS integration by configuring the base path and port for the ASP.NET Core Module:

public static IWebHost BuildWebHost(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        ...

호스팅에 대한 자세한 내용은 ASP.NET Core에서 호스팅을 참조하세요.For more information on hosting, see Hosting in ASP.NET Core.

IIS 옵션IIS options

IISIntegration 서비스 옵션을 구성하려면 ConfigureServicesIISOptions에 대한 서비스 구성을 포함합니다.To configure IISIntegration service options, include a service configuration for IISOptions in ConfigureServices:

services.Configure<IISOptions>(options => 
{
    ...
});
옵션Option 기본Default 설정Setting
AutomaticAuthentication true true면 인증 미들웨어가 HttpContext.User를 설정하고 제네릭 과제에 응답합니다.If true, the authentication middleware sets the HttpContext.User and responds to generic challenges. false면 인증 미들웨어가 ID(HttpContext.User)만 제공하고, AuthenticationScheme에 의해 명시적으로 요청될 때 과제에 응답합니다.If false, the authentication middleware only provides an identity (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.
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.

web.configweb.config

web.config 파일은 ASP.NET Core 모듈을 구성하고 다른 IIS 구성을 제공합니다.The web.config file configures the ASP.NET Core Module and provides other IIS configuration. web.config 만들기, 변환 및 게시는 <Project Sdk="Microsoft.NET.Sdk.Web"> 프로젝트(.csproj) 파일의 맨 위에 프로젝트의 SDK를 설정할 때 포함되는 Microsoft.NET.Sdk.Web을 통해 처리됩니다.Creating, transforming, and publishing web.config is handled by Microsoft.NET.Sdk.Web, which is included when you set your project's SDK at the top of your project (.csproj) file, <Project Sdk="Microsoft.NET.Sdk.Web">. MSBuild 대상이 web.config 파일을 변환하지 못하게 하려면 프로젝트 파일에 true 설정이 포함된 <IsTransformWebConfigDisabled> 속성을 추가합니다.To prevent the MSBuild target from transforming your web.config file, add the <IsTransformWebConfigDisabled> property to your project file with a setting of true:

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

dotnet publish 또는 Visual Studio 게시를 사용하여 게시할 때 프로젝트에 web.config 파일이 없으면 게시되는 출력에 해당 파일이 만들어집니다.If you don't have a web.config file in the project when you publish with dotnet publish or with Visual Studio publish, the file is created for you in published output. 프로젝트에 web.config 파일이 있는 경우 올바른 processPatharguments를 통해 변환되어 ASP.NET Core 모듈을 구성하고 게시된 출력으로 이동합니다.If you have a web.config file in your project, it's transformed with the correct processPath and arguments to configure the ASP.NET Core Module and moved to published output. 변환은 파일에 포함된 IIS 구성 설정에 영향을 주지 않습니다.The transformation doesn't touch IIS configuration settings that you've included in the file.

IIS 웹 사이트 만들기Create the IIS Website

  1. 대상 IIS 시스템에서는 디렉터리 구조에서 설명하는 앱의 게시된 폴더와 파일을 포함할 폴더를 만듭니다.On the target IIS system, create a folder to contain the app's published folders and files, which are described in Directory Structure.

  2. 만든 폴더 내에서 logs 폴더를 만들어 stdout 로그를 보관합니다(시작 문제를 해결하도록 로깅을 사용하려는 경우).Within the folder you created, create a logs folder to hold stdout logs (if you plan to enable logging to troubleshoot start-up issues). 페이로드에 logs 폴더가 있는 응용 프로그램을 배포하려는 경우 이 단계를 건너뛸 수 있습니다.If you plan to deploy your application with a logs folder in the payload, you may skip this step. 폴더를 자동으로 만드는 미해결 문제가 있습니다.There's an open issue to create the folder automatically. MSBuild에서 log 폴더를 만들려면 다음 Target을 프로젝트 파일에 추가합니다.If you would like MSBuild to create the log folder for you, add the following Target to your project file:

    <Target Name="CreateLogsFolder" AfterTargets="AfterPublish">
      <MakeDir Directories="$(PublishDir)logs" Condition="!Exists('$(PublishDir)logs')" />
      <MakeDir Directories="$(PublishUrl)logs" Condition="!Exists('$(PublishUrl)logs')" />
    </Target>
    
  3. IIS 관리자에서 새 웹 사이트를 만듭니다.In IIS Manager, create a new website. 사이트 이름을 입력하고 실제 경로를 만든 앱의 배포 폴더로 설정합니다.Provide a Site name and set the Physical path to the app's deployment folder that you created. 바인딩 구성을 제공하고 웹 사이트를 만듭니다.Provide the Binding configuration and create the website.

  4. 응용 프로그램 풀을 관리 코드 없음으로 설정합니다.Set the application pool to No Managed Code. ASP.NET Core는 별도의 프로세스에서 실행되며 런타임을 관리합니다.ASP.NET Core runs in a separate process and manages the runtime.

  5. 웹 사이트 추가 창을 엽니다.Open the Add Website window.

    [사이트] 상황에 맞는 메뉴에서 [웹 사이트 추가]를 클릭합니다.

  6. 웹 사이트를 구성합니다.Configure the website.

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

  7. 응용 프로그램 풀 패널에서 웹 사이트의 앱 풀을 마우스 오른쪽 단추로 클릭하고 팝업 메뉴에서 기본 설정...을 선택하여 응용 프로그램 풀 편집 창을 엽니다.In the Application Pools panel, open the Edit Application Pool window by right-clicking on the website's app pool and selecting Basic Settings... from the popup menu.

    [응용 프로그램 풀]의 상황에 맞는 메뉴에서 [기본 설정]을 선택합니다.

  8. .NET CLR 버전관리 코드 없음으로 설정합니다.Set the .NET CLR version to No Managed Code.

    관리 코드 없음으로 설정된 .NET CLR 버전

    참고: .NET CLR 버전관리 코드 없음으로 설정하는 것은 선택 사항입니다.Note: Setting the .NET CLR version to No Managed Code is optional. ASP.NET Core에서는 데스크톱 CLR을 로드할 필요가 없습니다.ASP.NET Core doesn't rely on loading the desktop CLR.

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

    앱 풀의 기본 ID(프로세스 모델 > ID)를 ApplicationPoolIdentity에서 다른 ID로 변경하는 경우, 새 ID에 앱 폴더, 데이터베이스 및 기타 필요한 리소스에 액세스하는 데 필요한 권한이 있는지 확인합니다.If you change the default identity of the app pool (Process Model > Identity) 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.

응용 프로그램 배포Deploy the application

대상 IIS 시스템에서 만든 폴더에 응용 프로그램을 배포합니다.Deploy the application to the folder you created on the target IIS system. 웹 배포는 배포에 권장되는 메커니즘입니다.Web Deploy is the recommended mechanism for deployment. 웹 배포에 대한 대안은 아래와 같습니다.Alternatives to Web Deploy are listed below.

게시된 배포용 앱이 실행되고 있지 않은지 확인합니다.Confirm that the published app for deployment isn't running. 앱이 실행 중이면 publish 폴더의 파일이 잠겨 있습니다.Files in the publish folder are locked when the app is running. 잠긴 파일을 복사할 수 없으므로 배포를 수행할 수 없습니다.Deployment can't occur because locked files can't be copied.

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

웹 배포에서 사용할 게시 프로필을 만드는 방법은 Visual Studio 및 MSBuild용 게시 프로필을 만들어 ASP.NET Core 앱 배포 항목을 참조하세요.See Create publish profiles for Visual Studio and MSBuild, to deploy ASP.NET Core apps topic to learn how to create a publish profile for use with Web Deploy. 호스팅 공급자에서 게시 프로필을 제공하거나 이 프로필을 만들 수 있도록 지원하는 경우 Visual Studio 게시 대화 상자를 사용하여 해당 프로필을 다운로드하고 가져옵니다.If your hosting provider supplies 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 외부에서 웹 배포를 사용할 수도 있습니다.You can also use Web Deploy outside of Visual Studio from the command line. 자세한 내용은 웹 배포 도구를 참조하세요.For more information, see Web Deployment Tool.

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

웹 배포를 사용하지 않거나 Visual Studio를 사용하지 않으려면 Xcopy, Robocopy 또는 PowerShell과 같이 여러 가지 방법 중 하나를 사용하여 응용 프로그램을 호스팅 시스템으로 이동할 수 있습니다.If you don't wish to use Web Deploy or are not using Visual Studio, you may use any of several methods to move the application to the hosting system, such as Xcopy, Robocopy, or PowerShell. Visual Studio 사용자는 게시 샘플(영문)을 사용할 수 있습니다.Visual Studio users may use the Publish Samples.

웹 사이트 찾아보기Browse the website

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

경고

.NET Core 앱은 IIS와 Kestrel 서버 간의 역방향 프록시를 통해 호스팅됩니다..NET Core apps are hosted via a reverse-proxy between IIS and the Kestrel server. 역방향 프록시를 만들려면 web.config 파일이 IIS에 제공되는 웹 사이트 실제 경로인 배포된 응용 프로그램의 콘텐츠 루트 경로(일반적으로 응용 프로그램 기본 경로)에 있어야 합니다.In order to create the reverse-proxy, the web.config file must be present at the content root path (typically the app base path) of the deployed application, which is the website physical path provided to IIS. 중요한 파일은 my_application.runtimeconfig.json, my_application.xml(XML 문서 주석) 및 my_application.deps.json과 같은 하위 폴더를 포함한 앱의 실제 경로에 있습니다.Sensitive files exist on the app's physical path, including subfolders, such as my_application.runtimeconfig.json, my_application.xml (XML Documentation comments), and my_application.deps.json. web.config 파일은 Kestrel에 대한 역방향 프록시를 만들어 IIS에서 이러한 파일 및 기타 중요한 파일을 제공하지 못하도록 하는 데 필요합니다.The web.config file is required to create the reverse proxy to Kestrel, which prevents IIS from serving these and other sensitive files. 따라서 web.config 파일을 실수로 이름을 변경하거나 배포에서 제거하지 않아야 합니다.Therefore, it's important that the web.config file isn't accidently renamed or removed from the deployment.

데이터 보호Data protection

ASP.NET Core 응용 프로그램은 다음 조건에서 키 링을 메모리에 저장합니다.An ASP.NET Core application stores the keyring in memory under the following conditions:

  • 웹 사이트가 IIS 뒤에 호스팅됩니다.A website is hosted behind IIS.
  • 데이터 보호 스택이 영구 저장소에 키 링을 저장하도록 구성되지 않았습니다.The Data Protection stack hasn't been configured to store the keyring in a persistent store.

키 링이 메모리에 저장되는 경우 앱을 다시 시작할 때 다음과 같이 됩니다.If the keyring is stored in memory when the app restarts:

  • 모든 폼 인증 토큰이 유효하지 않습니다.All forms authentication tokens are invalidated.
  • 사용자가 다음 요청에서 다시 로그인해야 합니다.Users are required to login again on their next request.
  • 키 링으로 보호한 데이터가 더 이상 보호되지 않습니다.Any data you protected with the keyring are no longer protected.
경고

데이터 보호는 인증에 사용되는 것을 포함하여 여러 ASP.NET 미들웨어에서 사용됩니다.Data Protection is used by several ASP.NET middlewares, including those used in authentication. 사용자 고유 코드에서 데이터 보호 API를 호출하지 않아도 배포 스크립트 또는 사용자 코드를 사용하여 데이터 보호를 구성해야 합니다.Even if you don't call Data Protection APIs from your own code, you should configure Data Protection with a deployment script or in your code. 데이터 보호를 구성하지 않으면 기본적으로 키가 메모리에 보관되어 앱을 다시 시작할 때 삭제됩니다.If you don't configure data protection, by default the keys are held in memory and discarded when your app restarts. 다시 시작하면 쿠키 인증 미들웨어로 작성된 모든 쿠키가 무효화되고 사용자가 다시 로그인해야 합니다.Restarting invalidates cookies written by the cookie authentication middleware and users must login again.

IIS에서 데이터 보호를 구성하려면 다음 방법 중 하나를 사용해야 합니다.To configure Data Protection under IIS, you must use one of the following approaches:

  • PowerShell 스크립트를 실행하여 적절한 레지스트리 항목을 만듭니다(예: .\Provision-AutoGenKeys.ps1 DefaultAppPool).Run a powershell script to create suitable registry entries (For example, .\Provision-AutoGenKeys.ps1 DefaultAppPool). 이렇게 하면 키가 레지스트리에 저장되고, 컴퓨터 수준 키가 있는 DPAPI를 사용하여 보호됩니다.This stores keys in the registry, protected using DPAPI with a machine-wide key.
  • 사용자 프로필을 로드하도록 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 application pool. 사용자 프로필True로 설정합니다.Set Load User Profile to True. 이렇게 하면 사용자 프로필 디렉터리 아래에 키가 저장되고, 앱 풀에 사용되는 사용자 계정과 관련된 키가 있는 DPAPI를 사용하여 보호됩니다.This stores keys under the user profile directory and protects them using DPAPI with a key specific to the user account used for the app pool.
  • 파일 시스템을 키 링 저장소로 사용하도록 앱 코드를 조정합니다.Adjust your app code to use the file system as a key ring store. X509 인증서를 사용하여 키 링을 보호하고 신뢰할 수 있는 인증서인지 확인합니다.Use an X509 certificate to protect the keyring and ensure it's a trusted certificate. 자체 서명된 인증서인 경우 신뢰할 수 있는 루트 저장소에 배치해야 합니다.If it's a self signed certificate, you must place it 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.

1. 데이터 보호 레지스트리 하이브 만들기1. Create a Data Protection Registry Hive

ASP.NET 응용 프로그램에서 사용하는 데이터 보호 키는 응용 프로그램 외부의 레지스트리 하이브에 저장됩니다.Data Protection keys used by ASP.NET applications are stored in registry hives external to the applications. 지정된 응용 프로그램의 키를 유지하려면 해당 앱의 응용 프로그램 풀에 대한 레지스트리 하이브를 만들어야 합니다.To persist the keys for a given application, you must create a registry hive for the app's application pool.

독립 실행형 IIS 설치의 경우 ASP.NET Core 앱에서 사용되는 각 앱 풀에 대해 Data Protection Provision-AutoGenKeys.ps1 PowerShell 스크립트를 사용할 수 있습니다.For standalone IIS installations, you may use the Data Protection Provision-AutoGenKeys.ps1 PowerShell script for each app pool used with an ASP.NET Core app. 이 스크립트는 작업자 프로세스 계정에만 ACL로 지정된 특수 레지스트리 키를 HKLM 레지스트리에 만듭니다.This script creates a special registry key in the HKLM registry that is ACLed only to the worker process account. 미사용 키는 DPAPI를 사용하여 암호화됩니다.Keys are encrypted at rest using DPAPI.

웹 팜 시나리오에서는 UNC 경로를 사용하여 데이터 보호 키 링을 저장하도록 앱을 구성할 수 있습니다.In web farm scenarios, an app can be configured to use a UNC path to store its data protection keyring. 기본적으로 데이터 보호 키는 암호화되지 않습니다.By default, the data protection keys are not encrypted. 이러한 공유에 대한 파일 권한은 앱이 실행되는 Windows 계정으로 제한되어야 합니다.You should ensure that the file permissions for such a share are limited to the Windows account the app runs as. 또한 X509 인증서를 사용하여 미사용 키를 보호하도록 선택할 수 있습니다.In addition, you may choose to protect keys at rest using an X509 certificate. 사용자가 인증서를 업로드하여 사용자의 신뢰할 수 있는 인증서 저장소에 배치하고 사용자의 앱이 실행될 모든 컴퓨터에서 인증서를 사용할 수 있도록 하는 메커니즘을 고려해야 할 수 있습니다.You may wish to 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. 자세한 내용은 데이터 보호 구성을 참조하세요.See Configuring Data Protection for details.

2. 사용자 프로필을 로드하도록 IIS 응용 프로그램 풀 구성2. 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. 이렇게 하면 사용자 프로필 디렉터리 아래에 키가 저장되고, 앱 풀에 사용되는 사용자 계정과 관련된 키가 있는 DPAPI를 사용하여 보호됩니다.This stores keys under the user profile directory and protects them using DPAPI with a key specific to the user account used for the app pool.

3. 데이터 보호에 대한 컴퓨터 수준 정책3. 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. 자세한 내용은 데이터 보호 설명서를 참조하세요.See the data protection documentation for more details.

하위 응용 프로그램 구성Configuration of sub-applications

루트 응용 프로그램 아래에 추가된 하위 응용 프로그램은 ASP.NET Core 모듈을 처리기로 포함하지 않아야 합니다.Sub applications added under the root application shouldn't include the ASP.NET Core Module as a handler. 하위 응용 프로그램의 web.config 파일에 모듈을 처리기로 추가하면 하위 앱을 찾아보려고 할 때 잘못된 구성 파일을 참조하는 500.19(내부 서버 오류)가 표시됩니다.If you add the module as a handler in a sub-application's web.config file, you receive a 500.19 (Internal Server Error) referencing the faulty config file when you attempt to browse the sub-app. 다음 예제에서는 ASP.NET Core 하위 앱에 대해 게시된 web.config 파일의 내용을 보여 줍니다.The following example shows the contents of 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 파일에서 상속된 처리기를 명시적으로 제거해야 합니다.If you intend to host a non-ASP.NET Core sub-app underneath an ASP.NET Core app, you must explicitly remove the inherited handler in the sub-app 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>

web.config 파일을 사용하여 ASP.NET Core 모듈을 구성하는 방법에 대한 자세한 내용은 ASP.NET Core 모듈 소개 항목 및 ASP.NET Core 모듈 구성 참조를 참조하세요.For more information on configuring the ASP.NET Core Module with the web.config file, see the Introduction to ASP.NET Core Module topic and the ASP.NET Core Module configuration reference.

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

IIS 구성은 여전히 역방향 프록시 구성에 적용되는 IIS 기능에 대한 web.config에 포함된 <system.webServer> 섹션의 영향을 받습니다.IIS configuration is still influenced by the <system.webServer> section of web.config for those IIS features that apply to a reverse proxy configuration. 예를 들어 시스템 수준에서 동적 압축을 사용하도록 IIS를 구성했을 수 있지만, 응용 프로그램의 web.config 파일에서 <urlCompression> 요소를 사용하여 응용 프로그램의 해당 설정을 사용하지 않도록 설정할 수 있습니다.For example, you may have IIS configured at the system level to use dynamic compression, but you could disable that setting for an app with the <urlCompression> element in the app's web.config file. 자세한 내용은 <system.webServer>에 대한 구성 참조, ASP.NET Core 모듈 구성 참조ASP.NET Core와 함께 IIS 모듈 사용을 참조하세요.For more information, see the configuration reference for <system.webServer>, ASP.NET Core Module Configuration Reference and Using IIS Modules with ASP.NET Core. 격리된 응용 프로그램 풀(IIS 10.0 이상에서 지원됨)에서 실행되는 개별 응용 프로그램에 대한 환경 변수를 설정해야 하는 경우 <environmentVariables> 환경 변수 항목의 AppCmd.exe 명령 섹션을 참조하세요.If you need to set environment variables for individual apps running in isolated Application Pools (supported on IIS 10.0+), 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<system.web>, <appSettings>, <connectionStrings><location> 요소로 구성된 .NET Framework 응용 프로그램과 달리 ASP.NET Core 응용 프로그램은 다른 구성 공급자를 사용하여 구성됩니다.Unlike .NET Framework applications that are configured with the <system.web>, <appSettings>, <connectionStrings>, and <location> elements in web.config, ASP.NET Core apps are configured using other configuration providers. 자세한 내용은 구성을 참조하세요.For more information, see Configuration.

응용 프로그램 풀Application Pools

단일 시스템에서 여러 웹 사이트를 호스팅하는 경우 각 앱을 자체의 응용 프로그램 풀에서 실행하여 앱을 서로 격리해야 합니다.When hosting multiple websites on a single system, you should isolate the apps from each other by running each app in its own application pool. IIS 웹 사이트 추가 대화 상자에서는 이 동작이 기본적으로 설정되어 있습니다.The IIS Add Website dialog defaults to this behavior. 사이트 이름을 제공하면 해당 텍스트가 응용 프로그램 풀 텍스트 상자로 자동으로 전송됩니다.When you provide a Site name, the text is automatically transferred to the Application pool textbox. 웹 사이트를 추가할 때 해당 사이트 이름을 사용하여 새 응용 프로그램 풀이 만들어집니다.A new application pool is created using the site name when you add the website.

응용 프로그램 풀 IDApplication Pool Identity

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

응용 프로그램 풀 고급 설정 대화 상자

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

앱에 대한 높은 액세스 권한을 IIS 작업자 프로세스에 부여해야 하는 경우 응용 프로그램이 포함된 디렉터리에 대한 ACL(액세스 제어 목록)을 수정해야 합니다.If you need to grant the IIS worker process elevated access to your app, you must modify the Access Control List (ACL) for the directory containing your application.

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

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

  3. 보안 탭 아래에서 편집 단추를 클릭한 다음 추가 단추를 클릭합니다.Under the Security tab, click the Edit button and then the Add button.

  4. 위치 단추를 클릭하고 시스템이 선택되어 있는지 확인합니다.Click the Locations button and make sure you select your system.

  5. 선택할 개체 이름 입력 텍스트 상자에서 IIS AppPool\DefaultAppPool을 입력합니다.Enter IIS AppPool\DefaultAppPool in Enter the object names to select textbox.

    응용 프로그램 폴더에 대한 사용자 또는 그룹 선택 대화 상자

  6. 이름 확인 단추를 클릭한 다음 확인을 클릭합니다.Click the Check Names button and then click OK.

    응용 프로그램 폴더에 대한 사용자 또는 그룹 선택 대화 상자

ICACLS 도구를 사용하여 명령 프롬프트를 통해 이 작업을 수행할 수도 있습니다.You can also do this via a command prompt using ICACLS tool:

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

문제 해결 팁Troubleshooting tips

IIS 배포로 문제를 진단하려면 다음을 수행합니다.To diagnose problems with IIS deployments:

  • 브라우저 출력을 검토합니다.Study browser output.
  • 이벤트 뷰어를 통해 시스템의 응용 프로그램 로그를 검사합니다.Examine the system's Application log through Event Viewer.
  • stdout 로깅을 사용하도록 설정합니다.Enable stdout logging. ASP.NET Core 모듈 로그는 web.config에 있는 <aspNetCore> 요소의 stdoutLogFile 특성에 제공된 경로에 있습니다. 특성 값에 제공된 경로의 모든 폴더가 배포에 있어야 합니다.The ASP.NET Core Module log is found on the path provided in the stdoutLogFile attribute of the <aspNetCore> element in web.config. Any folders on the path provided in the attribute value must exist in the deployment. stdoutLogEnabled="true"도 설정해야 합니다.You must also set stdoutLogEnabled="true". Microsoft.NET.Sdk.Web SDK를 사용하여 web.config 파일을 만드는 앱은 기본적으로 stdoutLogEnabled 설정을 false로 설정하므로 직접 web.config 파일을 제공하거나 stdout 로깅을 사용하도록 파일을 수정합니다.Apps that use the the Microsoft.NET.Sdk.Web SDK to create the web.config file default the stdoutLogEnabled setting to false, so you must manually provide the web.config file or modify the file in order to enable stdout logging.

startupTimeLimit(기본값: 120초) 및 startupRetryCount(기본값: 2) 모듈이 통과할 때까지 일반적인 몇 가지 오류는 브라우저, 응용 프로그램 로그 및 ASP.NET Core 모듈 로그에 표시되지 않습니다.Several of the common errors don't appear in the browser, Application Log, and ASP.NET Core Module Log until the module startupTimeLimit (default: 120 seconds) and startupRetryCount (default: 2) have passed. 따라서 모듈에서 앱의 프로세스를 시작하지 못했다고 추론될 때까지 6분 정도 기다립니다.Therefore, wait a full six minutes before deducing that the module has failed to start a process for the app.

앱이 제대로 작동하는지 확인하는 빠른 방법은 Kestrel에서 직접 앱을 실행하는 것입니다.One quick way to determine if the app is working properly is to run the app directly on Kestrel. 앱이 FDD(프레임워크 종속 배포)로 게시된 경우 앱의 IIS 실제 경로인 배포 폴더에 있는 dotnet my_application.dll을 실행합니다.If the app was published as a framework-dependent deployment (FDD), execute dotnet my_application.dll in the deployment folder, which is the IIS physical path to the app. 앱이 SCD(자체 포함 배포)로 게시된 경우 명령 프롬프트에서 직접 앱의 실행 파일, 즉 배포 폴더에 있는 my_application.exe를 실행합니다.If the app was published as a self-contained deployment (SCD), run the app's executable directly from a command prompt, my_application.exe, in the deployment folder. Kestrel이 5000 기본 포트에서 수신 대기중인 경우 http://localhost:5000/에서 앱을 찾아볼 수 있습니다.If Kestrel is listening on default port 5000, you should be able to browse the app at http://localhost:5000/. 앱이 Kestrel 끝점 주소에서 정상적으로 응답하는 경우, 문제는 IIS-ASP.NET Core 모듈-Kestrel 구성과 관련이 있으며 앱 자체 내에서 관련되었을 가능성은 낮습니다.If the app responds normally at the Kestrel endpoint address, the problem is more likely related to the IIS-ASP.NET Core Module-Kestrel configuration and less likely within the app itself.

Kestrel 서버에 대한 IIS 역방향 프록시가 제대로 작동하는지 확인하는 한 가지 방법은 정적 파일 미들웨어를 사용하여 wwwroot에 있는 앱의 정적 파일에서 스타일시트, 스크립트 또는 이미지에 대한 간단한 정적 파일 요청을 수행하는 것입니다.One way to determine if the IIS reverse proxy to the Kestrel server is working properly is to perform a simple static file request for a stylesheet, script, or image from the app's static files in wwwroot using Static File middleware. 앱에서 정적 파일을 제공할 수 있지만 MVC보기와 다른 끝점에서 오류가 발생하는 경우, 문제는 IIS-ASP.NET Core 모듈-Kestrel 구성과 관련이 없으며 앱 자체 내에서 관련되었을 가능성이 높습니다(예: MVC 라우팅 또는 500 내부 서버 오류).If the app can serve static files but MVC Views and other endpoints are failing, the problem is less likely related to the IIS-ASP.NET Core Module-Kestrel configuration and more likely within the app itself (for example, MVC routing or 500 Internal Server Error).

Kestrel이 IIS 뒤에서 정상적으로 시작되지만 로컬에서 성공적으로 실행한 후에 시스템에서 응용 프로그램이 실행되지 않으면 임시로 web.config에 환경 변수를 추가하여 ASPNETCORE_ENVIRONMENTDevelopment로 설정할 수 있습니다.When Kestrel starts normally behind IIS but the app won't run on the system after successfully running locally, you can temporarily add an environment variable to web.config to set the ASPNETCORE_ENVIRONMENT to Development. 앱 시작에서 환경을 재정의하지 않는다면 시스템에서 앱이 실행될 때 개발자 예외 페이지가 표시됩니다.As long as you don't override the environment in app startup, this allows the developer exception page to appear when the app is run on the system. 이 방식으로 ASPNETCORE_ENVIRONMENT에 대한 환경 변수를 설정하는 것은 인터넷에 노출되지 않은 준비/테스트 시스템에만 적용하는 것이 좋습니다.Setting the environment variable for ASPNETCORE_ENVIRONMENT in this way is only recommended for staging/testing systems that aren't exposed to the Internet. 완료되면 반드시 web.config 파일에서 해당 환경 변수를 제거해야 합니다.Be sure you remove the environment variable from the web.config file when finished. web.config를 통해 역방향 프록시에 대한 환경 변수를 설정하는 방법에 대한 자세한 내용은aspNetCore의 environmentVariables 자식 요소를 참조하세요.For information on setting environment variables via web.config for the reverse proxy, see environmentVariables child element of aspNetCore.

응용 프로그램 로깅을 사용하면 대부분의 경우에서 앱 또는 역방향 프록시 문제를 해결하는 데 도움이 됩니다.In most cases, enabling application logging assists in troubleshooting problems with the app or the reverse proxy. 자세한 내용은 로깅을 참조하세요.See Logging for more information.

마지막 문제 해결 팁은 개발 컴퓨터의 .NET Core SDK 또는 응용프로그램 내의 패키지 버전을 업그레이드한 후에 실행되지 않는 응용프로그램에 관한 것입니다.Our last troubleshooting tip pertains to apps that fail to run after upgrading either the .NET Core SDK on the development machine or package versions within the app. 경우에 따라 중요한 업그레이드를 수행할 때 일관되지 않은 패키지로 인해 응용 프로그램이 중단될 수 있습니다.In some cases, incoherent packages may break an app when performing major upgrades. 프로젝트의 binobj 폴더를 삭제하고, %UserProfile%\.nuget\packages\%LocalAppData%\Nuget\v3-cache에 있는 패키지 캐시를 지우고, 프로젝트를 복원하고, 해당 응용 프로그램을 다시 배포하기 전에 시스템의 이전 배포가 완전히 삭제되었는지 확인하여 이러한 문제를 대부분 수정할 수 있습니다.You can fix most of these issues by deleting the bin and obj folders in the project, clearing package caches at %UserProfile%\.nuget\packages\ and %LocalAppData%\Nuget\v3-cache, restoring the project, and confirming that your prior deployment on the system has been completely deleted prior to re-deploying the app.

패키지 캐시를 지우는 편리한 방법은 NuGet.org에서 NuGet.exe 도구를 구하여 시스템 PATH에 추가하고 명령 프롬프트에서 nuget locals all -clear를 실행하는 것입니다.A convenient way to clear package caches is to obtain the NuGet.exe tool from NuGet.org, add it to your system PATH, and execute nuget locals all -clear from a command prompt. NuGet.exe를 가져오지 않고도 명령 프롬프트에서 dotnet nuget locals all --clear 명령을 실행할 수 있습니다.You can also execute the dotnet nuget locals all --clear command from a command prompt without obtaining NuGet.exe.

일반적인 오류Common errors

다음은 모든 오류를 나열한 목록이 아닙니다.The following isn't a complete list of errors. 여기에 나열되지 않은 오류가 발생하면 아래의 참고 섹션에 자세한 오류 메시지를 남겨 주세요.Should you encounter an error not listed here, please leave a detailed error message in the comments section below.

설치 관리자에서 VC++ 재배포 가능 패키지를 가져올 수 없음Installer unable to obtain VC++ Redistributable

  • 설치 관리자 예외: 0x80072efd 또는 0x80072f76 - 지정되지 않은 오류Installer Exception: 0x80072efd or 0x80072f76 - Unspecified error

  • 설치 관리자 로그 예외†: 오류 0x80072efd 또는 0x80072f76: EXE 패키지를 실행하지 못했습니다.Installer Log Exception†: Error 0x80072efd or 0x80072f76: Failed to execute EXE package

    †로그는 C:\Users\{USER}\AppData\Local\Temp\dd_DotNetCoreWinSvrHosting__{timestamp}.log에 있습니다.†The log is located at C:\Users\{USER}\AppData\Local\Temp\dd_DotNetCoreWinSvrHosting__{timestamp}.log.

문제 해결:Troubleshooting:

  • 시스템에서 서버 호스팅 번들을 설치하지만 인터넷에 액세스할 수 없는 경우 이 예외는 설치 관리자에서 Microsoft Visual C++ 2015 재배포 가능 패키지를 얻을 수 없을 때 발생합니다.If the system doesn't have Internet access while installing the server hosting bundle, this exception occurs when the installer is prevented from obtaining the Microsoft Visual C++ 2015 Redistributable. Microsoft 다운로드 센터에서 설치 관리자를 얻을 수 있습니다.You may obtain an installer from the Microsoft Download Center. 설치 관리자에 오류가 발생하면 FDD(프레임워크 종속 배포)를 호스팅하는 데 필요한 .NET Core 런타임을 받지 못할 수 있습니다.If the installer fails, you may not receive the .NET Core runtime required to host a framework-dependent deployment (FDD). FDD를 호스팅하려면 프로그램 & 기능에서 런타임이 설치되어 있는지 확인합니다.If you plan to host an FDD, confirm that the runtime is installed in Programs & Features. .NET 다운로드에서 런타임 설치 관리자를 얻을 수 있습니다.You may obtain a runtime installer from .NET Downloads. 런타임을 설치한 후 시스템을 다시 시작하거나 명령 프롬프트에서 net stop was /y에 이어 net start w3svc를 실행하여 IIS를 다시 시작합니다.After installing the runtime, restart the system or restart IIS by executing net stop was /y followed by net start w3svc from a command prompt.

OS 업그레이드에서 32비트 ASP.NET Core 모듈이 제거됨OS upgrade removed the 32-bit ASP.NET Core Module

  • 응용 프로그램 로그: 모듈 DLL C:\WINDOWS\system32\inetsrv\aspnetcore.dll을(를) 로드하지 못했습니다.Application Log: The Module DLL C:\WINDOWS\system32\inetsrv\aspnetcore.dll failed to load. 데이터 오류입니다.The data is the error.

문제 해결:Troubleshooting:

  • OS를 업그레이드하는 동안 C:\Windows\SysWOW64\inetsrv 디렉터리에 있는 비OS 파일은 보존되지 않습니다.Non-OS files in the C:\Windows\SysWOW64\inetsrv directory aren't preserved during an OS upgrade. OS를 업그레이드하기 전에 ASP.NET Core 모듈을 설치한 다음 OS를 업그레이드한 후에 32비트 모드에서 AppPool을 실행하려고 하면 이 문제가 발생합니다.If you have the ASP.NET Core Module installed prior to an OS upgrade and then try to run any AppPool in 32-bit mode after an OS upgrade, you encounter this issue. OS를 업그레이드한 후에 ASP.NET Core 모듈을 복구합니다.After an OS upgrade, repair the ASP.NET Core Module. .NET Core Windows Server 호스팅 번들 설치를 참조하세요.See Install the .NET Core Windows Server Hosting bundle. 설치 관리자를 실행할 때 복구를 선택합니다.Select Repair when you run the installer.

플랫폼이 RID와 충돌함Platform conflicts with RID

  • 브라우저: HTTP 오류 502.5 - 프로세스 오류Browser: HTTP Error 502.5 - Process Failure

  • 응용 프로그램 로그: 실제 루트 'C:{PATH}\'이(가) 있는 응용 프로그램 'MACHINE/WEBROOT/APPHOST/MY_APPLICATION'에서 "C:\{PATH}\my_application.{exe|dll}" 명령줄로 프로세스를 시작하지 못했습니다., 오류 코드 = '0x80004005 : ff.Application Log: Application 'MACHINE/WEBROOT/APPHOST/MY_APPLICATION' with physical root 'C:{PATH}\' failed to start process with commandline '"C:\{PATH}\my_application.{exe|dll}" ', ErrorCode = '0x80004005 : ff.

  • ASP.NET Core 모듈 로그: 처리되지 않은 예외: System.BadImageFormatException: 파일이나 어셈블리 'my_application.dll'을(를) 로드할 수 없습니다.ASP.NET Core Module Log: Unhandled Exception: System.BadImageFormatException: Could not load file or assembly 'my_application.dll'. 프로그램을 잘못된 형식으로 로드하려고 했습니다.An attempt was made to load a program with an incorrect format.

문제 해결:Troubleshooting:

  • 응용 프로그램이 Kestrel에서 로컬로 실행되는지 확인합니다.Confirm that the application runs locally on Kestrel. 프로세스 오류는 응용 프로그램 내의 문제 때문일 수 있습니다.A process failure might be the result of a problem within the application. 자세한 내용은 문제 해결 팁을 참조하세요.For more information, see Troubleshooting tips.

  • .csproj에서 RID와 충돌하는 <PlatformTarget>을 설정하지 않았는지 확인합니다.Confirm that you didn't set a <PlatformTarget> in your .csproj that conflicts with the RID. 예를 들어 dotnet publish -c Release -r win10-x64를 사용하거나 .csproj<RuntimeIdentifiers>win10-x64로 설정하여 x86<PlatformTarget>를 지정하지 않고 win10-x64인 RID를 사용하여 게시하지 않습니다.For example, don't specify a <PlatformTarget> of x86 and publish with an RID of win10-x64, either by using dotnet publish -c Release -r win10-x64 or by setting the <RuntimeIdentifiers> in your .csproj to win10-x64. 프로젝트는 경고 또는 오류 없이 게시되지만 시스템에서 위와 같이 로깅된 예외와 함께 실패합니다.The project publishes without warning or error but fails with the above logged exceptions on the system.

  • Azure 앱 배포에서 응용 프로그램을 업그레이드하고 새 어셈블리를 배포할 때 이 예외가 발생하면 이전 배포에서 모든 파일을 수동으로 삭제합니다.If this exception occurs for an Azure Apps deployment when upgrading an application and deploying newer assemblies, manually delete all files from the prior deployment. 호환되지 않는 어셈블리가 오랫동안 남아 있으면 업그레이드된 응용 프로그램을 배포할 때 System.BadImageFormatException 예외가 발생할 수 있습니다.Lingering incompatible assemblies can result in a System.BadImageFormatException exception when deploying an upgraded app.

URI 끝점이 잘못되었거나 중지된 웹 사이트URI endpoint wrong or stopped website

  • 브라우저: ERR_CONNECTION_REFUSEDBrowser: ERR_CONNECTION_REFUSED

  • 응용 프로그램 로그: 항목 없음Application Log: No entry

  • ASP.NET Core 모듈 로그: 로그 파일이 만들어지지 않았습니다.ASP.NET Core Module Log: Log file not created

문제 해결:Troubleshooting:

  • 응용 프로그램에 올바른 URI 끝점을 사용하고 있는지 확인합니다.Confirm you are using the correct URI endpoint for the application. 바인딩을 확인합니다.Check your bindings.

  • IIS 웹 사이트가 중지됨 상태가 아닌지 확인합니다.Confirm that the IIS website is not in the Stopped state.

CoreWebEngine 또는 W3SVC 서버 기능이 사용되지 않음CoreWebEngine or W3SVC server features disabled

  • OS 예외: ASP.NET Core 모듈을 사용하려면 IIS 7.0 CoreWebEngine 및 W3SVC 기능이 설치되어 있어야 합니다.OS Exception: The IIS 7.0 CoreWebEngine and W3SVC features must be installed to use the ASP.NET Core Module.

문제 해결:Troubleshooting:

  • 적절한 역할과 기능을 사용하도록 설정했는지 확인합니다.Confirm that you have enabled the proper role and features. IIS 구성을 참조하세요.See IIS Configuration.

잘못된 웹 사이트 실제 경로 또는 누락된 응용 프로그램Incorrect website physical path or application missing

  • 브라우저: 403 사용할 수 없음 - 액세스가 거부되었습니다. - 또는 - 403.14 사용할 수 없음 - 웹 서버가 이 디렉터리의 내용을 표시하지 못하도록 구성되었습니다.Browser: 403 Forbidden - Access is denied --OR-- 403.14 Forbidden - The Web server is configured to not list the contents of this directory.

  • 응용 프로그램 로그: 항목 없음Application Log: No entry

  • ASP.NET Core 모듈 로그: 로그 파일이 만들어지지 않았습니다.ASP.NET Core Module Log: Log file not created

문제 해결:Troubleshooting:

  • IIS 웹 사이트 기본 설정과 실제 응용 프로그램 폴더를 확인합니다.Check the IIS website Basic Settings and the physical application folder. 응용 프로그램이 IIS 웹 사이트 실제 경로의 폴더에 있는지 확인합니다.Confirm that the application is in the folder at the IIS website Physical path.

잘못된 역할, 설치되지 않은 모듈 또는 잘못된 권한Incorrect role, module not installed, or incorrect permissions

  • 브라우저: 500.19 내부 서버 오류 - 요청된 페이지와 관련된 구성 데이터가 잘못되어 해당 페이지에 액세스할 수 없습니다.Browser: 500.19 Internal Server Error - The requested page cannot be accessed because the related configuration data for the page is invalid.

  • 응용 프로그램 로그: 항목 없음Application Log: No entry

  • ASP.NET Core 모듈 로그: 로그 파일이 만들어지지 않았습니다.ASP.NET Core Module Log: Log file not created

문제 해결:Troubleshooting:

  • 적절한 역할을 사용하도록 설정했는지 확인합니다.Confirm that you've enabled the proper role. IIS 구성을 참조하세요.See IIS Configuration.

  • 프로그램 & 기능을 확인하고 Microsoft ASP.NET Core 모듈이 설치되어 있는지 확인합니다.Check Programs & Features and confirm that the Microsoft ASP.NET Core Module has been installed. Microsoft ASP.NET Core 모듈이 설치된 프로그램 목록에 없으면 해당 모듈을 설치합니다.If the Microsoft ASP.NET Core Module isn't present in the list of installed programs, install the module. .NET Core Windows Server 호스팅 번들 설치를 참조하세요.See Install the .NET Core Windows Server Hosting bundle.

  • 응용 프로그램 풀 > 프로세스 모델 > IDApplicationPoolIdentity로 설정되어 있는지 또는 사용자 지정 ID에 앱의 배포 폴더에 액세스할 수 있는 올바른 권한이 있는지 확인합니다.Make sure that the Application Pool > Process Model > Identity is set to ApplicationPoolIdentity or your custom identity has the correct permissions to access the app's deployment folder.

잘못된 processPath, 누락된 PATH 변수, 설치되지 않은 호스팅 번들, 다시 시작되지 않은 시스템/IIS, 설치되지 않은 VC++ 재배포 가능 패키지 또는 dotnet.exe 액세스 위반Incorrect processPath, missing PATH variable, hosting bundle not installed, system/IIS not restarted, VC++ Redistributable not installed, or dotnet.exe access violation

  • 브라우저: HTTP 오류 502.5 - 프로세스 오류Browser: HTTP Error 502.5 - Process Failure

  • 응용 프로그램 로그: 실제 루트 'C:\{PATH}\'이(가) 있는 응용 프로그램 'MACHINE/WEBROOT/APPHOST/MY_APPLICATION'에서 '".\my_application.exe"' 명령줄로 프로세스를 시작하지 못했습니다., 오류 코드 = '0x80070002 : 0.Application Log: Application 'MACHINE/WEBROOT/APPHOST/MY_APPLICATION' with physical root 'C:\{PATH}\' failed to start process with commandline '".\my_application.exe" ', ErrorCode = '0x80070002 : 0.

  • ASP.NET Core 모듈 로그: 로그 파일이 만들어졌지만 비어 있습니다.ASP.NET Core Module Log: Log file created but empty

문제 해결:Troubleshooting:

  • 응용 프로그램이 Kestrel에서 로컬로 실행되는지 확인합니다.Confirm that the application runs locally on Kestrel. 프로세스 오류는 응용 프로그램 내의 문제 때문일 수 있습니다.A process failure might be the result of a problem within the application. 자세한 내용은 문제 해결 팁을 참조하세요.For more information, see Troubleshooting tips.

  • web.config<aspNetCore> 요소에서 processPath 특성을 확인하여 FDD(프레임워크 종속 배포)에 대한 dotnet인지 또는 SCD(자체 포함 배포)에 대한 \my_application.exe인지 확인합니다.Check the processPath attribute on the <aspNetCore> element in web.config to confirm that it's dotnet for a framework-dependent deployment (FDD) or .\my_application.exe for a self-contained deployment (SCD).

  • FDD의 경우 dotnet.exe에서 PATH 설정을 통해 액세스하지 못할 수 있습니다.For an FDD, dotnet.exe might not be accessible via the PATH settings. 시스템 PATH 설정에 C:\Program Files\dotnet\이 있는지 확인합니다.Confirm that C:\Program Files\dotnet\ exists in the System PATH settings.

  • FDD의 경우 dotnet.exe에서 응용 프로그램 풀의 사용자 ID에 액세스하지 못할 수 있습니다.For an FDD, dotnet.exe might not be accessible for the user identity of the Application Pool. AppPool 사용자 ID에 C:\Program Files\dotnet 디렉터리에 대한 액세스 권한이 있는지 확인합니다.Confirm that the AppPool user identity has access to the C:\Program Files\dotnet directory. C:\Program Files\dotnet 및 응용 프로그램 디렉터리에 AppPool 사용자 ID에 대해 구성된 거부 규칙이 없는지 확인합니다.Confirm that there are no deny rules configured for the AppPool user identity on the C:\Program Files\dotnet and application directories.

  • FDD를 배포한 다음 IIS를 다시 시작하지 않고 .NET Core를 설치했을 수 있습니다.You may have deployed an FDD and installed .NET Core without restarting IIS. 서버를 다시 시작하거나 명령 프롬프트에서 net stop was /y에 이어 net start w3svc를 실행하여 IIS를 다시 시작합니다.Either restart the server or restart IIS by executing net stop was /y followed by net start w3svc from a command prompt.

  • 호스팅 시스템에 .NET Core 런타임을 설치하지 않고 FDD를 배포했을 수 있습니다.You may have deployed an FDD without installing the .NET Core runtime on the hosting system. FDD를 배포하려고 하지만 .NET Core 런타임을 설치하지 않은 경우 시스템에서 .NET Core Windows Server 호스팅 번들 설치 관리자를 실행합니다.If you're attempting to deploy a FDD and haven't installed the .NET Core runtime, run the .NET Core Windows Server Hosting bundle installer on the system. .NET Core Windows Server 호스팅 번들 설치를 참조하세요.See Install the .NET Core Windows Server Hosting bundle. 인터넷에 연결되지 않은 시스템에 .NET Core 런타임을 설치하려는 경우 .NET 다운로드에서 런타임을 얻은 다음 호스팅 번들 설치 관리자를 실행하여 ASP.NET Core 모듈을 설치합니다.If you're attempting to install the .NET Core runtime on a system without an Internet connection, obtain the runtime from .NET Downloads and run the hosting bundle installer to install the ASP.NET Core Module. 설치를 완료하려면 시스템을 다시 시작하거나 명령 프롬프트에서 net stop was /y에 이어 net start w3svc를 실행하여 IIS를 다시 시작합니다.Complete the installation by restarting the system or restarting IIS by executing net stop was /y followed by net start w3svc from a command prompt.

  • FDD를 배포한 다음 시스템/IIS를 다시 시작하지 않고 .NET Core를 설치했을 수 있습니다.You may have deployed an FDD and installed .NET Core without restarting the system/IIS. 시스템을 다시 시작하거나 명령 프롬프트에서 net stop was /y에 이어 net start w3svc를 실행하여 IIS를 다시 시작합니다.Either restart the system or restart IIS by executing net stop was /y followed by net start w3svc from a command prompt.

  • FDD를 배포했을 수 있지만 Microsoft Visual C++ 2015 재배포 가능 패키지(x64)가 시스템에 설치되어 있지 않습니다.You may have deployed an FDD and the Microsoft Visual C++ 2015 Redistributable (x64) is not installed on the system. Microsoft 다운로드 센터에서 설치 관리자를 얻을 수 있습니다.You may obtain an installer from the Microsoft Download Center.

<aspNetCore> 요소의 잘못된 인수Incorrect arguments of <aspNetCore> element

  • 브라우저: HTTP 오류 502.5 - 프로세스 오류Browser: HTTP Error 502.5 - Process Failure

  • 응용 프로그램 로그: 실제 루트 'C:\{PATH}\'이(가) 있는 응용 프로그램 'MACHINE/WEBROOT/APPHOST/MY_APPLICATION'에서 '"dotnet" .\my_application.dll' 명령줄로 프로세스를 시작하지 못했습니다., 오류 코드 = '0x80004005 : 80008081.Application Log: Application 'MACHINE/WEBROOT/APPHOST/MY_APPLICATION' with physical root 'C:\{PATH}\' failed to start process with commandline '"dotnet" .\my_application.dll', ErrorCode = '0x80004005 : 80008081.

  • ASP.NET Core 모듈 로그: 실행할 응용 프로그램이 없습니다.: 'PATH\my_application.dll'ASP.NET Core Module Log: The application to execute does not exist: 'PATH\my_application.dll'

문제 해결:Troubleshooting:

  • 응용 프로그램이 Kestrel에서 로컬로 실행되는지 확인합니다.Confirm that the application runs locally on Kestrel. 프로세스 오류는 응용 프로그램 내의 문제 때문일 수 있습니다.A process failure might be the result of a problem within the application. 자세한 내용은 문제 해결 팁을 참조하세요.For more information, see Troubleshooting tips.

  • web.config<aspNetCore> 요소에서 arguments 특성을 검사하여 (a) FDD(프레임워크 종속 배포)에 대한 .\my_application.dll인지, 또는 (b) 없는 경우 빈 문자열(arguments=“”)이거나 SCD(자체 포함 배포)에 대한 앱의 인수(arguments=“arg1, arg2, ...”) 목록인지 확인합니다.Examine the arguments attribute on the <aspNetCore> element in web.config to confirm that it is either (a) .\my_application.dll for a framework-dependent deployment (FDD); or (b) not present, an empty string (arguments=""), or a list of your app's arguments (arguments="arg1, arg2, ...") for a self-contained deployment (SCD).

누락된 .NET Framework 버전Missing .NET Framework version

  • 브라우저: 502.3 잘못된 게이트웨이 - 요청을 라우팅하는 동안 연결 오류가 발생했습니다.Browser: 502.3 Bad Gateway - There was a connection error while trying to route the request.

  • 응용 프로그램 로그: 오류 코드 = 실제 루트 'C:\{PATH}\'이(가) 있는 응용 프로그램 'MACHINE/WEBROOT/APPHOST/MY_APPLICATION'에서 '"dotnet" .\my_application.dll' 명령줄로 프로세스를 시작하지 못했습니다., 오류 코드 = '0x80004005 : 80008081.Application Log: ErrorCode = Application 'MACHINE/WEBROOT/APPHOST/MY_APPLICATION' with physical root 'C:\{PATH}\' failed to start process with commandline '"dotnet" .\my_application.dll', ErrorCode = '0x80004005 : 80008081.

  • ASP.NET Core 모듈 로그: 메서드, 파일 또는 어셈블리 예외가 없습니다.ASP.NET Core Module Log: Missing method, file, or assembly exception. 예외에 지정된 메서드, 파일 또는 어셈블리는 .NET Framework 메서드, 파일 또는 어셈블리입니다.The method, file, or assembly specified in the exception is a .NET Framework method, file, or assembly.

문제 해결:Troubleshooting:

  • 시스템에서 누락된 .NET Framework 버전을 설치합니다.Install the .NET Framework version missing from the system.

  • FDD(프레임워크 종속 배포)의 경우 시스템에 올바른 런타임이 설치되어 있는지 확인합니다.For a framework-dependent deployment (FDD), confirm that you have the correct runtime installed on the system. 프로젝트를 1.1에서 2.0으로 업그레이드하고 호스팅 시스템에 배포한 다음 이 예외가 발생하면 호스팅 시스템에 Framework 2.0을 설치해야 합니다.If you upgrade a project from 1.1 to 2.0, deploy to the hosting system, and receive this exception, ensure you install the 2.0 framework on the hosting system.

중지된 응용 프로그램 풀Stopped Application Pool

  • 브라우저: 503 서비스를 사용할 수 없음Browser: 503 Service Unavailable

  • 응용 프로그램 로그: 항목 없음Application Log: No entry

  • ASP.NET Core 모듈 로그: 로그 파일이 만들어지지 않았습니다.ASP.NET Core Module Log: Log file not created

문제 해결Troubleshooting

  • 응용 프로그램 풀이 중지됨 상태가 아닌지 확인합니다.Confirm that the Application Pool is not in the Stopped state.

IIS 통합 미들웨어가 구현되지 않음IIS Integration middleware not implemented

  • 브라우저: HTTP 오류 502.5 - 프로세스 오류Browser: HTTP Error 502.5 - Process Failure

  • 응용 프로그램 로그: 실제 루트 'C:\{PATH}\'이(가) 있는 응용 프로그램 'MACHINE/WEBROOT/APPHOST/MY_APPLICATION'에서 '"C:\{PATH}\my_application.{exe|dll}"'명령줄로 프로세스를 만들었지만 지정된 포트 '{PORT}'에서 충돌하거나 응답하지 않거나 수신 대기하지 않습니다., 오류 코드 = '0x800705b4'Application Log: Application 'MACHINE/WEBROOT/APPHOST/MY_APPLICATION' with physical root 'C:\{PATH}\' created process with commandline '"C:\{PATH}\my_application.{exe|dll}" ' but either crashed or did not reponse or did not listen on the given port '{PORT}', ErrorCode = '0x800705b4'

  • ASP.NET Core 모듈 로그: 로그 파일이 만들어졌고 정상 작동을 보여 줍니다.ASP.NET Core Module Log: Log file created and shows normal operation.

문제 해결Troubleshooting

  • 앱이 Kestrel에서 로컬로 실행되는지 확인합니다.Confirm that the app runs locally on Kestrel. 프로세스 오류는 앱 내의 문제 때문일 수 있습니다.A process failure might be the result of a problem within the app. 자세한 내용은 문제 해결 팁을 참조하세요.For more information, see Troubleshooting tips.

  • 응용 프로그램의 WebHostBuilder()(ASP.NET Core 1.x)에서 .UseIISIntegration() 메서드를 호출하거나 CreateDefaultBuilder 메서드(ASP.NET Core 2.x)를 사용하는 IIS 통합 미들웨어를 올바르게 참조했는지 확인합니다.Confirm that you've correctly referenced the IIS Integration middleware by calling the .UseIISIntegration() method on the application's WebHostBuilder() (ASP.NET Core 1.x) or used the CreateDefaultBuilder method (ASP.NET Core 2.x). ASP.NET Core에서의 호스팅에서 자세한 내용을 참조하세요.See Hosting in ASP.NET Core for details.

하위 응용 프로그램에 <handlers> 섹션이 포함되어 있음Sub-application includes a <handlers> section

  • 브라우저: HTTP 오류 500.19 - 내부 서버 오류Browser: HTTP Error 500.19 - Internal Server Error

  • 응용 프로그램 로그: 항목 없음Application Log: No entry

  • ASP.NET Core 모듈 로그: 로그 파일이 만들어졌고 루트 응용 프로그램에 대해 정상 작동을 보여 줍니다.ASP.NET Core Module Log: Log file created and shows normal operation for the root application. 하위 응용 프로그램에 대한 로그 파일이 만들어지지 않았습니다.Log file not created for the sub-application.

문제 해결Troubleshooting

  • 하위 앱의 web.config 파일에 <handlers> 섹션이 포함되어 있지 않은지 확인합니다.Confirm that the sub-app's web.config file doesn't include a <handlers> section.

일반적인 응용 프로그램 구성 문제Application configuration general issue

  • 브라우저: HTTP 오류 502.5 - 프로세스 오류Browser: HTTP Error 502.5 - Process Failure

  • 응용 프로그램 로그: 실제 루트 'C:\{PATH}\'이(가) 있는 응용 프로그램 'MACHINE/WEBROOT/APPHOST/MY_APPLICATION'에서 '"C:\{PATH}\my_application.{exe|dll}"'명령줄로 프로세스를 만들었지만 지정된 포트 '{PORT}'에서 충돌하거나 응답하지 않거나 수신 대기하지 않습니다., 오류 코드 = '0x800705b4'Application Log: Application 'MACHINE/WEBROOT/APPHOST/MY_APPLICATION' with physical root 'C:\{PATH}\' created process with commandline '"C:\{PATH}\my_application.{exe|dll}" ' but either crashed or did not reponse or did not listen on the given port '{PORT}', ErrorCode = '0x800705b4'

  • ASP.NET Core 모듈 로그: 로그 파일이 만들어졌지만 비어 있습니다.ASP.NET Core Module Log: Log file created but empty

문제 해결Troubleshooting

  • 이 일반 예외는 응용 프로그램 구성 문제로 인해 프로세스가 시작되지 못했음을 나타냅니다.This general exception indicates that the process failed to start, most likely due to an application configuration issue. 디렉터리 구조를 참조하여 앱의 배포된 파일과 폴더가 적절하고, 앱의 구성 파일이 있고, 앱과 환경에 대한 올바른 설정을 포함하고 있는지 확인합니다.Referring to Directory Structure, confirm that your app's deployed files and folders are appropriate and that your app's configuration files are present and contain the correct settings for your app and environment. 자세한 내용은 문제 해결 팁을 참조하세요.For more information, see Troubleshooting tips.

리소스Resources