IIS 7.0 이상 버전에서 호스팅되는 웹 사이트를 방문할 때 발생하는 오류 메시지: HTTP 오류 404.17 - 찾을 수 없음
이 문서는 IIS(인터넷 정보 서비스) 7.0 이상 버전에서 호스트되는 웹 사이트를 방문할 때 HTTP 오류 404.17 - 찾을 수 없음 문제를 해결하는 데 도움이 됩니다.
원래 제품 버전: 인터넷 정보 서비스
원래 KB 번호: 2019689
증상
IIS 7.0 이상 버전에서 호스트되는 웹 사이트가 있습니다. 웹 브라우저를 사용하여 웹 사이트의 동적 콘텐츠로 이동하면 다음과 유사한 오류 메시지가 표시될 수 있습니다.
오류 요약
HTTP 오류 404.17 - 찾을 수 없음
요청된 콘텐츠는 스크립트로 표시되며 정적 파일 처리기에서 제공되지 않습니다.
자세한 오류 정보:Module StaticFileModule
Notification ExecuteRequestHandler
처리기 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비트가 아니거나 .NET Framework의 2.0 버전을 실행하지 않는 애플리케이션 풀에서 Classic
처리되는 경우 404.17 오류가 반환됩니다. 이 예제에서 리소스를 올바르게 제공하려면 세 가지 사전 조건을 모두 충족해야 합니다. 특히 이 리소스를 호스팅하는 애플리케이션 풀은 모드에 대해 Classic
구성되어야 하고, 2.0 버전의 .NET Framework를 사용하도록 구성해야 하며, 32비트 애플리케이션에 대해 설정해야 합니다.
해결
이 문제를 해결하려면 처리기에 설정된 모든 사전 조건을 충족하도록 애플리케이션을 호스팅하는 애플리케이션 풀을 구성합니다.
IIS 관리자 열기
컴퓨터 이름을 확장하고 왼쪽 창에서 애플리케이션 풀을 클릭합니다.
가운데 창에서 리소스를 호스팅하는 애플리케이션 풀을 강조 표시합니다.
맨 오른쪽 창에서 고급 설정을 클릭합니다 .
범주(일반)의 고급 설정 대화 상자에서 처리기 요구 사항과 일치하도록 다음 설정을 구성합니다.
- .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" />
재현 단계
두 개의 파일이 포함된 디렉터리를 만듭니다.
콘텐츠로 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>
이러한 두 파일을 사용하여 디렉터리를 가리키는 IIS 7.0 이상 버전 애플리케이션을 만듭니다.
통합 모드로 구성된 애플리케이션 풀에서 실행되도록 새 애플리케이션을 구성합니다.
test.aspx 찾습니다.