IIS 7.0 이상 버전에서 호스트되는 웹 사이트를 방문할 때 발생하는 오류 메시지: HTTP 오류 404.17 - 찾을 수 없음

이 문서는 IIS(인터넷 정보 서비스) 7.0 이상 버전에서 호스트되는 웹 사이트를 방문할 때 HTTP 오류 404.17 - 찾을 수 없음 문제를 resolve 데 도움이 됩니다.

원본 제품 버전: 인터넷 정보 서비스
원래 KB 번호: 2019689

증상

IIS 7.0 이상 버전에서 호스트되는 웹 사이트가 있습니다. 웹 브라우저를 사용하여 웹 사이트에서 동적 콘텐츠를 탐색할 때 다음과 유사한 오류 메시지가 표시될 수 있습니다.

오류 요약
HTTP 오류 404.17 - 찾을 수 없음
요청된 콘텐츠는 스크립트로 표시되며 정적 파일 처리기에서 제공되지 않습니다.
자세한 오류 정보:

Module StaticFileModule
알림 ExecuteRequestHandler
Handler StaticFile
오류 코드 0x80070032

요청된 URL http://iisserver:80/page.aspx
물리적 경로 C:\inetpub\wwwroot\page.aspx
로그온 메서드 익명
로그온 사용자 익명

원인

이 오류는 요청을 처리하도록 구성된 HTTP 처리기에 특정 사전 조건이 설정되어 있지만 애플리케이션 풀이 이러한 사전 조건의 일부 또는 전부를 충족하지 않기 때문에 발생합니다. 이렇게 하면 정적 파일 처리기가 대신 요청을 처리하는 데 사용됩니다. 그러면 요청 처리가 실패하고 요청이 정적 리소스가 아닌 동적 리소스에 대한 요청이므로 404.17 상태 반환됩니다.

예를 들어 다음 처리기 매핑을 고려합니다.

<add name="PageHandlerFactory-ISAPI-2.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />

이 경우 사이트에서 요청되는 *.aspx 리소스가 모드에서 실행되고 있지 않거나, 32비트가 아니거나, 2.0 버전의 .NET Framework 실행하지 않는 애플리케이션 풀에서 Classic 처리되면 404.17 오류가 반환됩니다. 이 예제에서 리소스를 올바르게 제공하려면 세 가지 사전 조건을 모두 충족해야 합니다. 특히 이 리소스를 호스팅하는 애플리케이션 풀은 모드에 대해 Classic 구성되어야 하며, 2.0 버전의 .NET Framework 사용하도록 구성해야 하며, 32비트 애플리케이션에 대해 설정해야 합니다.

해결 방법

이 문제를 resolve 처리기에 설정된 모든 사전 조건을 충족하도록 애플리케이션을 호스팅하는 애플리케이션 풀을 구성합니다.

  1. IIS 관리자 열기

  2. 컴퓨터 이름을 확장하고 왼쪽 창에서 애플리케이션 풀 을 클릭합니다.

  3. 가운데 창에서 리소스를 호스트하는 애플리케이션 풀을 강조 표시합니다.

  4. 맨 오른쪽 창에서 고급 설정...을 클릭합니다.

  5. 범주(일반)의 고급 설정 대화 상자에서 처리기 요구 사항에 맞게 다음 설정을 구성합니다.

    • .NET Framework 버전
    • 32비트 애플리케이션 사용
    • 관리형 파이프라인 모드

추가 정보

이 섹션의 정보는 오류에 언급된 웹 사이트 및 애플리케이션에 대해 구성된 처리기를 식별하고 해당 처리기에 대해 구성된 사전 조건을 식별하는 데 도움이 됩니다.

Appcmd.exe 명령

다음 명령을 사용하여 오류 출력에 나열된 웹 사이트에 대해 구성된 처리기를 식별할 수 있습니다.

애플리케이션 풀 나열

다음 명령은 애플리케이션이 실행 중인 애플리케이션 풀을 확인한 다음 해당 애플리케이션 풀에 대해 구성된 전제 조건을 나열하는 방법을 보여 줍니다.

C:\Windows\System32\inetsrv>appcmd.exe list apps /site.name:"Default Web Site"
APP "Default Web Site/" (applicationPool:DefaultAppPool)

C:\Windows\System32\inetsrv>appcmd.exe list apppools
APPPOOL "DefaultAppPool" (MgdVersion:v2.0,MgdMode:Integrated,state:Started)

목록 처리기

이 명령은 기본 웹 사이트의 특정 애플리케이션에 대해 구성된 처리기를 출력합니다.

C:\Windows\System32\inetsrv>appcmd.exe list config "Default Web Site/application" -section:handlers
<system.webServer>
  <handlers accessPolicy="Read, Script">
    <add name="PageHandlerFactory-ISAPI-2.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
    <add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
  </handlers>
</system.webServer>

ASP.NET 경우 *.aspx 리소스에 대해 구성된 처리기가 많을 수 있습니다. 경우에 따라 애플리케이션이 실행 중인 애플리케이션 풀과 일치하도록 처리기를 변경해야 할 수 있습니다. 다음은 다양한 조건 설정이 있는 다양한 ASP.NET 2.0 처리기의 목록입니다.

  • ASP.NET 2.0 통합 모드 32/64비트 처리기

    <add name="PageHandlerFactory-Integrated" path="*.aspx" verb="GET,HEAD,POST,DEBUG" 
         type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode" />
    
  • ASP.NET 2.0 클래식 모드 32비트 처리기

    <add name="PageHandlerFactory-ISAPI-2.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" 
        scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" 
        responseBufferLimit="0" />
    
  • ASP.NET 2.0 클래식 모드 64비트 처리기

    <add name="PageHandlerFactory-ISAPI-2.0-64" path="*.aspx" verb="GET,HEAD,POST,DEBUG" 
         modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" 
         preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
    

재현 단계

  1. 두 개의 파일이 포함된 디렉터리를 만듭니다.

    • 콘텐츠로 Test.aspx<%Response.Write("Hello World")%>

    • 콘텐츠로Web.config .

      <?xml version="1.0" encoding="UTF-8"?>
      <configuration>
          <system.webServer>
              <httpRedirect enabled="false" destination="http://TestSite" exactDestination="false" childOnly="false" httpResponseStatus="Permanent" />
              <security>
              </security>
              <handlers>
                  <clear/>
                  <add name="PageHandlerFactory-ISAPI-2.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
                  <add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
              </handlers>
          </system.webServer>
          <system.web>
              <authentication mode="Windows">
                  <forms cookieless="UseCookies" />
              </authentication>
          </system.web>
      </configuration>
      
  2. 이러한 두 파일을 사용하여 디렉터리를 가리키는 IIS 7.0 이상 버전 애플리케이션을 만듭니다.

  3. 통합 모드로 구성된 애플리케이션 풀에서 실행되도록 새 애플리케이션을 구성합니다.

  4. test.aspx 찾습니다.