재우니의 블로그

중요한건,,, .NET Core Windows Server Hosting 파일을 꼭 설치하시고, 재부팅 하시면 된다는 점.~ 나머지는 아래와 같이 윈도우에서 설정이 가능합니다.

지원되는 운영 체제

다음 운영 체제가 지원됩니다.

  • Windows 7 이상

  • Windows Server 2008 R2 이상

† 개념적으로이 문서에서 설명하는 IIS 구성은 Nano Server IIS에서 ASP.NET 코어 응용 프로그램을 호스팅하는 경우에도 적용되지만 특정 지침 은 Nano Server 에서 IIS 가있는 ASP.NET 코어를 참조하십시오 .

WebListener 서버 는 IIS와의 역방향 프록시 구성에서 작동하지 않습니다. Kestrel 서버를 사용해야 합니다 .

IIS 구성

웹 서버 (IIS) 역할을 활성화하고 역할 서비스를 설정합니다.

Windows 데스크톱 운영 체제

으로 이동하여 오프 Windows 기능을 켜거나> 제어판> 프로그램> 프로그램 및 기능을 제어 (화면 왼쪽). 인터넷 정보 서비스및 웹 관리 도구 그룹을 엽니 다 . IIS 관리 콘솔 의 확인란을 선택하십시오 . 월드 와이드 웹 서비스 상자를 선택하십시오 . World Wide Web 서비스 의 기본 기능을 사용 하거나 필요에 맞게 IIS 기능을 사용자 지정하십시오.

IIS 관리 콘솔 및 World Wide Web 서비스는 Windows 기능에서 선택됩니다.

Windows Server 운영 체제

서버 운영 체제의 경우 관리 메뉴 또는 서버 관리자 의 링크를 통해 역할 및 기능 추가 마법사를 사용하십시오 . 온 서버 역할 단계에 대한 확인란을 웹 서버 (IIS) .

웹 서버 IIS 역할은 서버 역할 선택 단계에서 선택됩니다.

온 역할 서비스 단계, 당신이 원하는 IIS 역할 서비스를 선택하거나 제공하는 기본 역할 서비스에 동의합니다.

기본 역할 서비스는 역할 서비스 선택 단계에서 선택됩니다.

확인 단계를 계속 진행 하여 웹 서버 역할 및 서비스를 설치하십시오. 웹 서버 (IIS) 역할을 설치 한 후에는 서버 / IIS를 다시 시작하지 않아도됩니다.

.NET Core Windows Server 호스팅 번들 설치

  1. .NET Core Windows Server Hosting 번들을 호스팅 시스템에 설치하십시오 . 번들은 .NET Core Runtime, .NET Core Library 및 ASP.NET Core Module을 설치 합니다. 이 모듈은 IIS와 Kestrel 서버 사이에 역방향 프록시를 생성합니다. 참고 : 시스템에 인터넷이 연결되어 있지 않으면 .NET Core Windows Server Hosting 번들을 설치하기 전에 Microsoft Visual C ++ 2015 Redistributable을 구해서 설치하십시오 .

  2. 시스템을 다시 시작하거나 명령 프롬프트에서 net stop was / y 다음에 net start w3svc 를 실행하여 시스템 PATH에 대한 변경 사항을 가져옵니다.

노트

자체 포함 된 배포 만 호스팅하기 때문에 시스템에 .NET Core 런타임이 필요하지 않은 경우 관리자 명령 프롬프트 인 DotNetCore 에서 설치 관리자를 실행하여 ASP.NET 코어 모듈 만 설치할 수 있습니다. 1.0.4_1.1.1-WindowsHosting.exe OPT_INSTALL_LTS_REDIST = 0 OPT_INSTALL_FTS_REDIST = 01

노트

IIS 공유 구성을 사용하는 경우 IIS 공유 구성을 사용하는 ASP.NET 핵심 모듈을 참조하십시오 .

Visual Studio로 게시 할 때 웹 배포 설치

Visual Studio에서 Web Deploy를 사용하여 응용 프로그램을 배포하려는 경우 호스팅 시스템에 최신 버전의 Web Deploy를 설치하십시오. Web Deploy를 설치하려면 Web Platform Installer (WebPI)를 사용 하거나 Microsoft 다운로드 센터 에서 직접 설치 프로그램을 다운로드하십시오 . 선호되는 방법은 WebPI를 사용하는 것입니다. WebPI는 호스팅 제공 업체를위한 독립형 설치 및 구성을 제공합니다.

응용 프로그램 구성

IISIntegration 구성 요소 사용

온 종속성 포함 Microsoft.AspNetCore.Server.IISIntegration의 응용 프로그램 종속성에서 패키지를. 가산하여 애플리케이션에 IIS 통합 미들웨어 통합 .UseIISIntegration () 로 확장 방법 WebHostBuilder () . .UseIISIntegration ()을 호출하는 코드 는 코드 이식성에 영향을 미치지 않습니다.1

기음#
var host = new WebHostBuilder()
    .UseKestrel()
    .UseContentRoot(Directory.GetCurrentDirectory())
    .UseIISIntegration()
    .UseStartup<Startup>()
    .Build();

IISIntegration 서비스에 대한 IISOptions 설정

구성하려면 IISIntegration의 서비스 옵션을위한 서비스 구성 포함 IISOptions 에서 ConfigureServices을 .

기음#
services.Configure<IISOptions>(options => {
  ...
});
선택권환경
자동 인증true이면 인증 미들웨어가 도착한 사용자 요청을 변경하고 일반적인 문제에 대응합니다. false이면 인증 미들웨어는 AuthenticationScheme에 명시 적으로 표시 한 경우에만 ID를 제공하고 챌린지에 응답합니다
ForwardClientCertificatetrue이고 MS-ASPNETCORE-CLIENTCERT요청 헤더가 있으면 true ITLSConnectionFeature가 채워집니다.
ForwardWindowsAuthenticationtrue이면 인증 미들웨어는 플랫폼 처리기 창 인증을 사용하여 인증을 시도합니다. false이면 인증 미들웨어가 추가되지 않습니다.

web.config

의 web.config 파일은 ASP.NET 코어 모듈을 구성하고 다른 IIS 구성을 제공합니다. web.config를 생성, 변환 및 게시 Microsoft.NET.Sdk.Web하는 작업은 .csproj 파일 의 맨 위에 프로젝트 SDK를 설정할 때 포함 되는 by로 처리됩니다 <Project Sdk="Microsoft.NET.Sdk.Web">. MSBuild 대상에서 web.config 파일 을 변환하지 못하게하려면 <IsTransformWebConfigDisabled> 속성을 프로젝트 파일에 다음과 같이 설정하십시오 true.

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

dotnet publish 또는 Visual Studio publish를 사용하여 게시  때 프로젝트에 web.config 파일 이 없으면 파일이 게시 된 출력으로 만들어집니다. 프로젝트에 파일이 있으면 올바른 processPath  인수  변환되어 ASP.NET 코어 모듈을 구성하고 게시 된 출력으로 이동합니다. 변환은 파일에 포함 된 IIS 구성 설정에는 영향을주지 않습니다.2

응용 프로그램 배포

  1. 대상 IIS 시스템에서 디렉터리 구조에 설명 된 응용 프로그램의 게시 된 폴더 및 파일을 포함 할 폴더를 만듭니다 .

  2. 생성 한 폴더 내에서 응용 프로그램 로그를 보관할 로그 폴더를 만듭니다 (로깅을 사용하려는 경우). 페이로드에 logs폴더가있는 응용 프로그램을 배포하려는 경우이 단계를 건너 뛸 수 있습니다.

  3. 에서 IIS 관리자 , 새로운 웹 사이트를 만들 수 있습니다. 사이트 이름을 입력하고 생성 한 응용 프로그램의 배포 폴더에 실제 경로  설정합니다 . 바인딩 구성을 제공하고 웹 사이트를 만듭니다.

  4. 응용 프로그램 풀을 관리되는 코드 없음으로 설정합니다 . ASP.NET 코어는 별도의 프로세스에서 실행되며 런타임을 관리합니다.

  5. 웹 사이트 추가 창을 엽니 다 .

    사이트 도구 메뉴에서 웹 사이트 추가를 클릭하십시오.

  6. 웹 사이트를 구성하십시오.

    웹 사이트 추가 단계에서 사이트 이름, 물리적 경로 및 호스트 이름을 제공하십시오.

  7. 에서 응용 프로그램 풀 패널에서 열 편집 응용 프로그램 풀의 웹 사이트의 응용 프로그램 풀과 선택에 마우스 오른쪽 버튼을 클릭하여 창을 기본 설정 ... 팝업 메뉴에서.

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

  8. .NET CLR 버전  관리되는 코드 없음으로 설정합니다 .

    .NET CLR 버전에 대한 관리되는 코드 없음을 설정합니다.

    참고 : .NET CLR 버전  관리 코드 없음으로 설정하는 것은 선택 사항입니다. ASP.NET Core는 데스크톱 CLR로드에 의존하지 않습니다.

  9. 프로세스 모델 ID에 적절한 사용 권한이 있는지 확인하십시오.

    응용 프로그램 풀 ( 프로세스 모델 > ID ) 의 기본 ID  ApplicationPoolIdentity 에서 다른 ID로 변경하는 경우 새 ID에 응용 프로그램의 폴더, 데이터베이스 및 기타 필요한 리소스에 액세스하는 데 필요한 권한이 있는지 확인하십시오.

  10. 1

응용 프로그램 배포

대상 IIS 시스템에서 만든 폴더에 응용 프로그램을 배포합니다. Web Deploy는 배포에 권장되는 메커니즘입니다. Web Deploy의 대안은 다음과 같습니다.

Visual Studio로 웹 배포

크리에이트 Visual Studio에서 제작 프로파일을 하고 클릭 게시 응용 프로그램을 배포하기 버튼을 클릭합니다. 호스팅 제공 업체에서 게시 프로필 또는 지원 만들기를 제공하는 경우 해당 프로필을 다운로드하고 Visual Studio 게시 대화 상자를 사용하여 가져옵니다 .

게시 대화 상자 페이지

Visual Studio 외부에서 웹 배포

명령 줄에서 Visual Studio 외부에서 Web Deploy를 사용할 수도 있습니다. 자세한 내용은 웹 배포 도구를 참조하십시오 .

웹 배포의 대안

Web Deploy를 사용하지 않거나 Visual Studio를 사용하지 않는 경우 여러 가지 방법 중 하나를 사용하여 응용 프로그램을 Xcopy, Robocopy 또는 PowerShell과 같은 호스팅 시스템으로 이동할 수 있습니다. Visual Studio 사용자는 예제 게시를 사용할 수 있습니다 .

웹 사이트 찾아보기

Microsoft Edge 브라우저가 IIS 시작 페이지를로드했습니다.

경고

.NET 핵심 응용 프로그램은 IIS와 Kestrel 서버 간의 역방향 프록시를 통해 호스팅됩니다. 리버스 프록시를 만들려면 배포 된 응용 프로그램의 콘텐츠 루트 경로 (일반적으로 응용 프로그램 기본 경로)에 web.config 파일이 있어야합니다.이 경로는 IIS에 제공되는 웹 사이트 실제 경로입니다. 민감한 파일은 my_application.runtimeconfig.json , my_application.xml (XML 문서 주석) 및 my_application.deps.json  같은 하위 폴더를 포함하여 앱의 실제 경로에 있습니다. 의 web.config 파일은 이들과 다른 중요한 파일을 제공에서 IIS를 방지 황조롱이에 역방향 프록시를 생성하는 데 필요합니다. 따라서  이 중요합니다 .1

데이터 보호

ASP.NET Core 응용 프로그램은 다음 조건에서 키 링을 메모리에 저장합니다.

  • IIS 뒤에 웹 사이트가 있습니다.
  • 데이터 보호 스택이 영구 저장소에 키링을 저장하도록 구성되지 않았습니다.

키링이 메모리에 저장되어있는 경우 앱이 다시 시작될 때 :

  • 모든 양식 인증 토큰은 유효하지 않습니다.
  • 사용자는 다음 요청시 다시 로그인해야합니다.
  • 키링으로 보호 한 데이터는 더 이상 보호되지 않습니다.
경고

데이터 보호는 인증에 사용되는 것을 포함하여 여러 ASP.NET 미들웨어에서 사용됩니다. 자체 코드에서 특별히 Data Protection API를 호출하지 않아도 배포 스크립트 나 자체 코드로 Data Protection을 구성해야합니다. 데이터 보호를 구성하지 않으면 기본적으로 키가 메모리에 보관되어 응용 프로그램이 다시 시작될 때 삭제됩니다. 다시 시작하면 쿠키 인증으로 작성된 쿠키가 무효화되고 사용자는 다시 로그인해야합니다.

IIS에서 데이터 보호를 구성하려면 다음 방법 중 하나를 사용해야합니다.

  • PowerShell 스크립트  실행하여 적절한 레지스트리 항목을 만듭니다 (예 :).\Provision-AutoGenKeys.ps1 DefaultAppPool . 이렇게하면 키를 레지스트리에 저장하고 DPAPI를 사용하여 컴퓨터 전체의 키로 보호 할 수 있습니다.
  • 사용자 프로필을로드하도록 IIS 응용 프로그램 풀을 구성합니다. 이 설정은 응용 프로그램 풀에 대한 고급 설정 아래  프로세스 모델 섹션에 있습니다. 설정 로드 사용자 프로필  . 이렇게하면 사용자 프로필 디렉터리 아래에 키가 저장되고 DPAPI를 사용하여 응용 프로그램 풀에 사용되는 사용자 계정과 관련된 키로 보호됩니다.True
  • 파일 시스템을 키 링 저장소로 사용하도록 응용 프로그램 코드를 조정하십시오 . X509 인증서를 사용하여 키 링을 보호하고 신뢰할 수있는 인증서인지 확인하십시오. 예를 들어 자체 서명 된 인증서 인 경우 신뢰할 수있는 루트 저장소에 배치해야합니다.

웹 팜에서 IIS를 사용하는 경우

  • 모든 컴퓨터가 액세스 할 수있는 파일 공유를 사용하십시오.
  • 각 컴퓨터에 X509 인증서를 배포하십시오. 코드에서 데이터 보호를 구성하십시오 .

1. 데이터 보호 레지스트리 하이브 만들기

ASP.NET 응용 프로그램에서 사용하는 데이터 보호 키는 응용 프로그램 외부의 레지스트리 하이브에 저장됩니다. 특정 응용 프로그램의 키를 유지하려면 응용 프로그램의 응용 프로그램 풀에 대한 레지스트리 하이브를 만들어야합니다.

독립 실행 형 IIS 설치의 경우 ASP.NET 핵심 응용 프로그램과 함께 사용되는 각 응용 프로그램 풀에 대해 Data Protection Provision-AutoGenKeys.ps1 PowerShell 스크립트 를 사용할 수 있습니다. 이 스크립트는 HKLM 레지스트리에 작업자 프로세스 계정에만 ACL로 지정된 특수 레지스트리 키를 만듭니다. 키는 DPAPI를 사용하여 암호화됩니다.

웹 팜 시나리오에서 UNC 경로를 사용하여 데이터 보호 키 링을 저장하도록 응용 프로그램을 구성 할 수 있습니다. 기본적으로 데이터 보호 키는 암호화되지 않습니다. 이러한 공유에 대한 파일 권한은 응용 프로그램이 실행되는 Windows 계정으로 제한되어야합니다. 또한 X509 인증서를 사용하여 나머지 키를 보호하도록 선택할 수 있습니다. 사용자가 인증서를 업로드하여 사용자의 신뢰할 수있는 인증서 저장소에 저장하고 사용자의 응용 프로그램이 실행될 모든 컴퓨터에서 인증서를 사용할 수 있도록하는 메커니즘을 고려할 수 있습니다. 자세한 내용은 데이터 보호 구성 을 참조하십시오.

2. 사용자 프로필을로드하도록 IIS 응용 프로그램 풀 구성

이 설정은 응용 프로그램 풀에 대한 고급 설정 아래의 프로세스 모델 섹션에 있습니다. 사용자 프로필로드를 True로 설정하십시오. 이렇게하면 사용자 프로필 디렉터리 아래에 키가 저장되고 DPAPI를 사용하여 응용 프로그램 풀에 사용되는 사용자 계정과 관련된 키로 보호됩니다.

3. 데이터 보호를위한 시스템 차원의 정책

데이터 보호 시스템은 데이터 보호 API를 사용하는 모든 응용 프로그램에 대한 기본 컴퓨터 전체 정책 설정에 대한 지원이 제한적 입니다 . 자세한 내용은 데이터 보호 설명서를 참조하십시오.

하위 응용 프로그램의 구성

IIS 사이트의 루트 응용 프로그램에 응용 프로그램을 추가 할 때 루트 응용 프로그램 web.config 파일에는 <handlers>ASP.NET 코어 모듈을 응용 프로그램의 처리기로 추가하는 섹션이 있어야 합니다. 루트 응용 프로그램에 추가 된 응용 프로그램에는 <handlers>섹션이 포함되어서는 안됩니다 . <handlers>하위 응용 프로그램의 web.config 파일에서이 섹션 을 반복하면 하위 응용 프로그램 을 찾아 볼 때 잘못된 구성 파일을 참조하는 500.19 (내부 서버 오류)가 표시됩니다.1

web.config로 IIS 구성

IIS 구성은 역방향 프록시 구성에 적용되는 IIS 기능에 대한 web.config<system.webServer> 섹션의 영향을받습니다 . 예를 들어 시스템 수준에서 동적 압축을 사용하도록 IIS를 구성했을 수 있지만 해당 web.config 파일 의 요소를 사용하여 해당 설정을 사용하지 않도록 설정할 수 있습니다. 자세한 내용은 참조 구성에 대한 기준 , ASP.NET 코어 모듈 구성 참조 , 및 ASP.NET IIS 코어 모듈을 사용 . 격리 된 응용 프로그램 풀 (IIS 10.0 이상에서 지원)에서 실행되는 개별 응용 프로그램에 환경 변수를 설정해야하는 경우 환경 변수 <environmentVariables><urlCompression><system.webServer>

web.config의 구성 섹션

.NET 프레임 워크로 구성되어 응용 프로그램과 달리 <system.web>, <appSettings>, <connectionStrings>, 및 <location>요소 의 web.config , ASP.NET 코어 앱이 다른 구성 공급자를 사용하여 구성됩니다. 자세한 내용은 구성을 참조하십시오 .

응용 프로그램 풀

단일 시스템에서 여러 웹 사이트를 호스팅 할 때 각 응용 프로그램을 자체 응용 프로그램 풀에서 실행하여 응용 프로그램을 서로 격리해야합니다. IIS Add Website 대화 상자의 기본값은이 동작입니다. 당신이 제공 할 때 사이트 이름을 텍스트가 자동으로 전송되는 응용 프로그램 풀 텍스트 상자. 웹 사이트를 추가 할 때 사이트 이름을 사용하여 새 응용 프로그램 풀이 만들어집니다.

응용 프로그램 풀 ID

응용 프로그램 풀 ID 계정을 사용하면 도메인이나 로컬 계정을 만들고 관리 할 필요없이 고유 한 계정으로 응용 프로그램을 실행할 수 있습니다. IIS 8.0 이상에서 IIS Admin Worker Process (WAS)는 새 응용 프로그램 풀의 이름으로 가상 계정을 만들고 기본적으로이 계정으로 응용 프로그램 풀의 작업자 프로세스를 실행합니다. IIS 관리 콘솔의 응용 프로그램 풀에 대한 고급 설정에서 ID가 ApplicationPoolIdentity 를 사용하도록 설정되어 있는지 확인 하십시오 (아래 그림 참조).

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

IIS 관리 프로세스는 Windows 보안 시스템의 응용 프로그램 풀 이름과 함께 보안 식별자를 만듭니다. 이 ID를 사용하여 리소스를 보호 할 수 있습니다. 그러나이 ID는 실제 사용자 계정이 아니며 Windows 사용자 관리 콘솔에 표시되지 않습니다.

IIS 작업자에게 응용 프로그램에 대한 상승 액세스 권한을 부여해야하는 경우 응용 프로그램이 포함 된 디렉터리에 대한 ACL (액세스 제어 목록)을 수정해야합니다.

  1. Windows 탐색기를 열고 디렉토리로 이동하십시오.

  2. 디렉토리를 마우스 오른쪽 단추로 클릭하고 등록 정보를 클릭하십시오 .

  3. 언더 보안 탭을 클릭 편집 버튼을 누른 다음 추가 버튼을 클릭합니다.

  4. 위치 버튼을 클릭하고 시스템을 선택했는지 확인하십시오.

  5. 입력 IIS AppPool을 \을 DefaultAppPool을 에서 선택할 개체 이름을 입력 텍스트 상자를.

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

  6. 클릭 이름 확인 버튼을 누른 다음 확인을 .

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

ICACLS 도구를 사용하여 명령 프롬프트를 통해이 작업을 수행 할 수도 있습니다 .

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

문제 해결 팁

IIS 배포의 문제를 진단하려면 브라우저 출력을 조사하고 이벤트 뷰어를 통해 시스템의 응용 프로그램 로그를 검사 한 다음 로깅을 사용하도록 설정 하십시오. ASP.NET 코어 모듈 로그는 제공된 경로를 찾을 수 stdoutLogFile에서 의 특성 에서 소자 의 Web.config . 특성 값에 제공된 경로의 모든 폴더가 배포에 있어야합니다. stdoutLogEnabled = "true"로 설정해야합니다 . SDK를 사용하여 web.config 파일 을 만드는 응용 프로그램 은 기본적으로 stdoutLogEnabled 설정을 false로 설정 하므로 수동으로 웹을 제공해야합니다 .stdout<aspNetCore>Microsoft.NET.Sdk.Webstdout

모듈의 startupTimeLimit (기본값 : 120 초) 및 startupRetryCount (기본값 : 2)가 지날 때까지 여러 가지 일반적인 오류가 브라우저, 응용 프로그램 로그 및 ASP.NET 코어 모듈 로그에 표시되지 않습니다 . 따라서 모듈이 응용 프로그램의 프로세스를 시작하지 못했다고 추론하기까지 6 분 정도 기다리십시오.

응용 프로그램이 제대로 작동하는지 확인하는 빠른 방법은 Kestrel에서 직접 응용 프로그램을 실행하는 것입니다. 응용 프로그램이 프레임 워크 종속 배포로 게시 된 경우 응용 프로그램 의 IIS 실제 경로 인 배포 폴더에서 dotnet my_application.dll 실행 합니다. 응용 프로그램이 자체 포함 된 배포로 게시 된 경우 배포 폴더 의 명령 프롬프트 my_application.exe 에서 응용 프로그램의 실행 파일을 직접 실행 합니다. Kestrel이 기본 포트 5000에서 청취하고 있다면,에서 응용 프로그램을 탐색 할 수 있어야합니다 http://localhost:5000/. 응용 프로그램이 Kestrel 끝점 주소에서 정상적으로 응답하는 경우 문제는 IIS-ASP.NET 핵심 모듈 -Kestrel 구성과 관련이 있으며 응용 프로그램 내에서 발생하지는 않습니다.

IIS 역방향 프록시가 Kestrel 서버에 제대로 작동하는지 확인하는 한 가지 방법은 정적 파일 미들웨어를 사용하여 wwwroot 의 응용 프로그램 정적 파일에서 스타일 시트, 스크립트 또는 이미지에 대한 간단한 정적 파일 요청을 수행하는 것 입니다. 응용 프로그램에서 정적 파일을 제공 할 수 있지만 MVC 뷰와 다른 끝점에서 오류가 발생하는 경우 문제는 IIS-ASP.NET 핵심 모듈 -Kestrel 구성과 관련이 없으며 응용 프로그램 내에서 발생할 가능성이 적습니다 (예 : MVC 라우팅 또는 500 Internal 서버 오류).1

Kestrel이 IIS 뒤에서 정상적으로 시작되지만 로컬에서 성공적으로 실행 한 후에 앱이 시스템에서 실행되지 않으면 web.config  환경 변수를 임시로 추가하여 를 (를) 설정할 ASPNETCORE_ENVIRONMENT Development있습니다. 앱을 시작할 때 환경을 덮어 쓰지 않는 한 , 앱이 시스템에서 실행될 때 개발자 예외 페이지 가 표시됩니다. ASPNETCORE_ENVIRONMENT이 방법으로 환경 변수를 설정하는 것은 인터넷에 노출되지 않은 스테이징 / 테스트 시스템에만 권장됩니다. 작업이 끝나면 web.config 파일 에서 환경 변수를 제거하십시오 . 역방향 프록시에 대한 web.config  통해 환경 변수를 설정하는 방법에 대한 자세한 내용은

대부분의 경우 응용 프로그램 로깅을 사용하면 응용 프로그램 또는 역방향 프록시의 문제를 해결하는 데 도움이됩니다. 자세한 정보는 로깅 을 참조하십시오.

마지막 문제 해결 팁은 개발 컴퓨터의 .NET Core SDK 또는 앱 내의 패키지 버전을 업그레이드 한 후에 실행하지 못하는 앱에 관한 것입니다. 경우에 따라 중요한 업그레이드를 수행 할 때 일관성없는 패키지로 인해 앱이 중단 될 수 있습니다. 당신은 삭제하여 이러한 문제의 대부분을 해결할 수 bin하고 obj, 프로젝트에 폴더에 패키지 캐시를 삭제 %UserProfile%\.nuget\packages\하고 %LocalAppData%\Nuget\v3-cache응용 프로그램을-배포 다시 프로젝트를 복원, 시스템에 대한 귀하의 사전 배포가 완전히 이전에 삭제 된 것을 확인.

패키지 캐시를 정리하는 편리한 방법 NuGet.exe NuGet.org 에서 도구를 가져 와서 시스템 PATH에 추가 nuget locals all -clear하고 명령 프롬프트에서 실행 하는 것입니다.

일반적인 오류

다음은 완전한 오류 목록이 아닙니다. 여기에 나열되지 않은 오류가 발생하면 아래의 설명 섹션에 자세한 오류 메시지를 남겨 두십시오.

설치 관리자가 VC ++ 재배포 가능 패키지를 얻을 수 없음

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

  • Installer 로그 예외 † : 오류 0x80072efd 또는 0x80072f76 : EXE 패키지를 실행하지 못했습니다.

    † 로그는 C : \ Users \ {USER} \ AppData \ Local \ Temp \ dd_DotNetCoreWinSvrHosting __ {timestamp} .log에 있습니다.

문제 해결:

  • 서버 호스팅 번들을 설치하는 동안 시스템에 인터넷 액세스 권한이없는 경우 설치 프로그램이 Microsoft Visual C ++ 2015 Redistributable 을 얻을 수없는 경우이 예외가 발생합니다 . Microsoft 다운로드 센터 에서 설치 프로그램을 구할 수 있습니다 . 설치 프로그램이 실패하면 프레임 워크 종속 배포를 호스팅하는 데 필요한 .NET Core 런타임을받지 못할 수 있습니다. 프레임 워크 종속 배포를 호스팅하려는 경우 런타임이 프로그램 및 기능에 설치되어 있는지 확인하십시오. .NET 다운로드 에서 런타임 설치 프로그램을 얻을 수 있습니다 . 런타임을 설치 한 후 명령 프롬프트에서 net stop was / y 다음에 net start w3svc  실행하여 시스템을 다시 시작하거나 IIS를 다시 시작하십시오 .

OS 업그레이드로 32 비트 ASP.NET 코어 모듈 제거

  • 응용 프로그램 로그 : Module DLL C : \ WINDOWS \ system32 \ inetsrv \ aspnetcore.dll 을로드하지 못했습니다. 데이터가 오류입니다.

문제 해결:

  • C : \ Windows \ SysWOW64 \ inetsrv 디렉토리의 비 OS 파일 은 OS 업그레이드 중에 보존되지 않습니다. OS 업그레이드 전에 ASP.NET 코어 모듈을 설치하고 OS 업그레이드 후 AppPool을 32 비트 모드로 실행하려고하면이 문제가 발생합니다. OS 업그레이드 후 ASP.NET 코어 모듈을 복구하십시오. .NET 핵심 Windows 서버 호스팅 번들 설치를 참조하십시오 . 설치 프로그램을 실행할 때 복구를 선택하십시오 .

RID와 플랫폼 충돌

  • 브라우저 : HTTP 오류 502.5 - 프로세스 실패

  • 응용 프로그램 로그 : 실제 루트 'C : {PATH} \'가 명령 줄 'C : \ {PATH} \ my_application. {exe | dll}' '을 (를) 사용하여 프로세스를 시작하지 못했습니다'MACHINE / WEBROOT / APPHOST / MY_APPLICATION ' = '0x80004005 : ff.

  • ASP.NET 코어 모듈 로그 : 처리되지 않은 예외 : System.BadImageFormatException : 파일 또는 어셈블리 'my_application.dll'을로드 할 수 없습니다. 잘못된 형식의 프로그램을로드하려고했습니다.

문제 해결:

  • 응용 프로그램이 Kestrel에서 로컬로 실행되는지 확인하십시오. 프로세스 실패는 응용 프로그램 내의. 제점의 결과 일 수 있습니다. 자세한 내용은 문제 해결 팁을 참조하십시오 .

  • RID와 충돌하는 .csproj 파일  설정하지 않았는지 확인 <PlatformTarget>하십시오 . 예를 들어, 지정하지 의를 과의 RID에 게시 하여 중, DOTNET는 win10-64 -r -c 출시 게시 또는를 설정하여 귀하의 .csproj 에를 . 프로젝트는 경고 또는 오류없이 게시되지만 시스템에 위의 예외가 기록되지 않으면 실패합니다.<PlatformTarget>x86win10-x64<RuntimeIdentifiers>win10-x64

  • Azure Apps 배포에서 응용 프로그램을 업그레이드하고 새 어셈블리를 배포 할 때이 예외가 발생하면 이전 배포에서 모든 파일을 수동으로 삭제하십시오. 호환되지 않는 어셈블리가 오래 System.BadImageFormatException있으면 업그레이드 된 응용 프로그램을 배포 할 때 예외 가 발생할 수 있습니다 .

URI 종단점이 잘못되었거나 웹 사이트가 중지되었습니다.

  • 브라우저 : ERR_CONNECTION_REFUSED

  • 응용 프로그램 로그 : 항목 없음

  • ASP.NET 코어 모듈 로그 : 로그 파일이 만들어지지 않았습니다.

문제 해결:

  • 응용 프로그램에 올바른 URI 끝점을 사용하고 있는지 확인하십시오. 바인딩을 확인하십시오.

  • IIS 웹 사이트가 중지됨 상태 가 아닌지 확인하십시오 .

CoreWebEngine 또는 W3SVC 서버 기능이 비활성화되었습니다.

  • OS 예외 : ASP.NET 코어 모듈을 사용하려면 IIS 7.0 CoreWebEngine 및 W3SVC 기능을 설치해야합니다.

문제 해결:

  • 적절한 역할과 기능을 사용하도록 설정했는지 확인하십시오. IIS 구성을 참조하십시오 .

잘못된 웹 사이트 실제 경로 또는 애플리케이션 누락

  • 브라우저 : 403 금지됨 - 액세스가 거부되었습니다. - 또는 403.14 금지됨 - 웹 서버가이 디렉토리의 내용을 나열하지 않도록 구성되었습니다.

  • 응용 프로그램 로그 : 항목 없음

  • ASP.NET 코어 모듈 로그 : 로그 파일이 만들어지지 않았습니다.

문제 해결:

  • IIS 웹 사이트의 기본 설정 과 실제 응용 프로그램 폴더를 확인하십시오. 응용 프로그램이 IIS 웹 사이트의 실제 경로 에있는 폴더에 있는지 확인하십시오 .

잘못된 역할, 모듈이 설치되지 않았거나 권한이 잘못되었습니다.

  • 브라우저 : 500.19 내부 ​​서버 오류 - 페이지의 관련 구성 데이터가 유효하지 않기 때문에 요청한 페이지에 액세스 할 수 없습니다.

  • 응용 프로그램 로그 : 항목 없음

  • ASP.NET 코어 모듈 로그 : 로그 파일이 만들어지지 않았습니다.

문제 해결:

  • 적절한 역할을 수행했는지 확인하십시오. IIS 구성을 참조하십시오 .

  • 프로그램 및 기능 을 확인하고 Microsoft ASP.NET Core Module 이 설치되어 있는지 확인 하십시오 . 경우 마이크로 소프트 ASP.NET 코어 모듈이 설치된 프로그램 목록에 존재하지 않는 모듈을 설치합니다. .NET 핵심 Windows 서버 호스팅 번들 설치를 참조하십시오 .

  • 응용 프로그램 풀> 프로세스 모델> ID  ApplicationPoolIdentity 로 설정되어 있는지 또는 사용자 지정 ID가 응용 프로그램의 배포 폴더에 액세스 할 수있는 올바른 권한이 있는지 확인하십시오 .

잘못된 processPath, PATH 변수 누락, 호스팅 번들이 설치되지 않음, 시스템 / IIS가 다시 시작되지 않음, VC ++ 재배포 가능 파일이 설치되지 않음 또는 dotnet.exe 액세스 위반

  • 브라우저 : HTTP 오류 502.5 - 프로세스 실패

  • 응용 프로그램 로그 : 실제 루트 'C : \ {PATH} \'가 '\ my_application.exe "명령 줄에서 프로세스를 시작하지 못했습니다'MACHINE / WEBROOT / APPHOST / MY_APPLICATION '응용 프로그램을 ErrorCode ='0x80070002 : 0.

  • ASP.NET 코어 모듈 로그 : 로그 파일이 생성되었지만 비어 있습니다.

문제 해결:

  • 응용 프로그램이 Kestrel에서 로컬로 실행되는지 확인하십시오. 프로세스 실패는 응용 프로그램 내의. 제점의 결과 일 수 있습니다. 자세한 내용은 문제 해결 팁을 참조하십시오 .

  • 체크 processPath의 상의 속성 <aspNetCore>의 요소를 Web.config의 가 있는지 확인하기 위해 DOTNET 프레임 워크에 의존하는 배포 나에 대한 . \ my_application.exe을 자체 포함 배포.

  • 프레임 워크 종속 배포의 경우 PATH 설정을 통해 dotnet.exe에 액세스 할 수 없습니다. 그 확인 C를 : \ 프로그램 파일 \의 DOTNET \이 시스템 PATH 설정에 존재합니다.

  • 프레임 워크 종속 배포 의 경우 응용 프로그램 풀의 사용자 ID에 대해 dotnet.exe에 액세스하지 못할 수 있습니다. AppPool 사용자 ID가 C : \ Program Files \ dotnet 디렉토리에 대한 액세스 권한을 갖고 있는지 확인하십시오 . C : \ Program Files \ dotnet 및 응용 프로그램 디렉터리 에 AppPool 사용자 ID에 대해 구성된 거부 규칙이 없는지 확인합니다 .

  • 프레임 워크 종속 배포를 배포하고 IIS를 다시 시작하지 않고 .NET Core를 설치했을 수 있습니다. 어느 서버를 다시 시작하거나 실행하여 IIS를 다시 시작 그물 정지를 Y /이었다 다음 에 net start w3svc를 명령 프롬프트에서.

  • 호스팅 시스템에 .NET Core 런타임을 설치하지 않고 프레임 워크 종속 배포를 배포했을 수 있습니다. 프레임 워크 종속 배포를 배포하려고하고 .NET Core 런타임을 설치하지 않은 경우 시스템 에서 .NET Core Windows Server Hosting 번들 설치 프로그램 을 실행하십시오. .NET 핵심 Windows 서버 호스팅 번들 설치를 참조하십시오 . 인터넷에 연결되지 않은 시스템에 .NET Core 런타임을 설치하려면 .NET 다운로드 에서 런타임을 가져 오고 관리자 명령 프롬프트에서 호스팅 번들 설치 프로그램을 실행하여 DotNetCore.1.1.0-WindowsHosting을 사용하여 모듈을 설치하십시오 .exe OPT_INSTALL_LTS_REDIST = 0 OPT_INSTALL_FTS_REDIST = 0 .

  • 프레임 워크 종속 배포를 배포하고 시스템 / IIS를 다시 시작하지 않고 .NET Core를 설치했을 수 있습니다. net stop 을 실행하여 시스템을 다시 시작하거나 IIS를 다시 시작한 다음 명령 프롬프트에서 net start w3svc  입력합니다.

  • 프레임 워크 종속 배포를 배포했을 수 있으며 Microsoft Visual C ++ 2015 재배포 가능 파일 (x64) 이 시스템에 설치되어 있지 않습니다. Microsoft 다운로드 센터 에서 설치 프로그램을 구할 수 있습니다 .

<aspNetCore> 요소의 잘못된 인수

  • 브라우저 : HTTP 오류 502.5 - 프로세스 실패

  • 응용 프로그램 로그 : 실제 루트 'C : \ {PATH} \'가 명령 줄 'dotnet ". \ my_application.dll', ErrorCode = '0x80004005 : 80008081'로 프로세스를 시작하지 못했습니다 'MACHINE / WEBROOT / APPHOST / MY_APPLICATION'응용 프로그램.

  • ASP.NET 코어 모듈 로그 : 실행할 응용 프로그램이 없습니다 : 'PATH \ my_application.dll'

문제 해결:

  • 응용 프로그램이 Kestrel에서 로컬로 실행되는지 확인하십시오. 프로세스 실패는 응용 프로그램 내의. 제점의 결과 일 수 있습니다. 자세한 내용은 문제 해결 팁을 참조하십시오 .

  • web.config  요소에서 arguments 속성을 검사하여 프레임 워크 종속 배포를 위해 (a) . \ my_applciation.dll 인지 확인 합니다. 또는 빈 문자열 ( arguments = "" ) 또는 응용 프로그램 인수 목록 ( arguments = "arg1, arg2, ..." )을 포함 할 수 있습니다.<aspNetCore>

누락 된 .NET Framework 버전

  • 브라우저 : 502.3 잘못된 게이트웨이 - 요청을 라우팅하는 동안 연결 오류가 발생했습니다.

  • 응용 프로그램 로그 : ErrorCode = 'C : \ {PATH} \'명령 줄에서 프로세스를 시작하지 못했습니다 'dotnet ". \ my_application.dll'ErrorCode = '0x80004005 : 80008081'물리적 루트가있는 'MACHINE / WEBROOT / APPHOST / MY_APPLICATION' .

  • ASP.NET 코어 모듈 로그 : 메서드, 파일 또는 어셈블리 예외가 없습니다. 예외에 지정된 메서드, 파일 또는 어셈블리는 .NET Framework 메서드, 파일 또는 어셈블리입니다.

문제 해결:

  • 시스템에없는 .NET Framework 버전을 설치하십시오.

  • 프레임 워크 종속 전개의 경우 시스템에 올바른 런타임이 설치되어 있는지 확인하십시오. 예를 들어 프로젝트를 1.0에서 1.1로 업그레이드하고 호스팅 시스템에 배포 한 다음이 예외가 발생하면 호스팅 시스템에 1.1 프레임 워크를 설치해야합니다.

중지 된 응용 프로그램 풀

  • 브라우저 : 503 서비스를 사용할 수 없습니다.

  • 응용 프로그램 로그 : 항목 없음

  • ASP.NET 코어 모듈 로그 : 로그 파일이 만들어지지 않았습니다.

문제 해결

  • 응용 프로그램 풀이 중지됨 상태 가 아닌지 확인합니다 .

IIS 통합 미들웨어가 구현되지 않음

  • 브라우저 : HTTP 오류 502.5 - 프로세스 실패

  • 응용 프로그램 로그 : 물리적 루트 'C : \ {PATH} \'가있는 명령 'C : \ {PATH} \ my_application. {exe | dll}' '을 사용하여'MACHINE / WEBROOT / APPHOST / MY_APPLICATION ' 또는 주어진 포트 '{PORT}'에 응답하지 않거나 응답하지 않았거나, ErrorCode = '0x800705b4'

  • ASP.NET 코어 모듈 로그 : 생성 된 로그 파일이며 정상적인 작동을 보여줍니다.

문제 해결

  • 응용 프로그램이 Kestrel에서 로컬로 실행되는지 확인하십시오. 프로세스 실패는 응용 프로그램 내의. 제점의 결과 일 수 있습니다. 자세한 내용은 문제 해결 팁을 참조하십시오 .

  • 응용 프로그램의 WebHostBuilder () 에서 .UseIISIntegration () 메서드를 호출하여 IIS 통합 미들웨어를 올바르게 참조했는지 확인합니다 .

하위 응용 프로그램에는 <handlers> 섹션이 있습니다.

  • 브라우저 : HTTP 오류 500.19 - 내부 서버 오류

  • 응용 프로그램 로그 : 항목 없음

  • ASP.NET 코어 모듈 로그 : 로그 파일이 만들어지고 루트 응용 프로그램에 대한 정상적인 작업이 표시됩니다. 하위 응용 프로그램에 대해 로그 파일이 만들어지지 않았습니다.

문제 해결

  • 하위 응용 프로그램의 web.config 파일에 <handlers>섹션이 포함되어 있지 않은지 확인합니다 .

응용 프로그램 구성 일반 문제

  • 브라우저 : HTTP 오류 502.5 - 프로세스 실패

  • 응용 프로그램 로그 : 물리적 루트 'C : \ {PATH} \'가있는 명령 'C : \ {PATH} \ my_application. {exe | dll}' '을 사용하여'MACHINE / WEBROOT / APPHOST / MY_APPLICATION ' 또는 주어진 포트 '{PORT}'에 응답하지 않거나 응답하지 않았거나, ErrorCode = '0x800705b4'

  • ASP.NET 코어 모듈 로그 : 로그 파일이 생성되었지만 비어 있습니다.

문제 해결

  • 이 일반적인 예외는 프로세스가 시작하지 못했음을 나타냅니다. 응용 프로그램 구성 문제로 인해 발생했을 가능성이 큽니다. 디렉토리 구조를 참조 하여 응용 프로그램의 배포 된 파일과 폴더가 적절하고 응용 프로그램의 구성 파일이 있고 응용 프로그램과 환경에 대한 올바른 설정이 포함되어 있는지 확인하십시오. 자세한 내용은 문제 해결 팁을 참조하십시오 .

자원