배경: 오늘 회사 터미널에서 기능 열기 예외가 발생하여 500 오류를 보고했습니다. Fiddler를 사용하여 링크를 찾은 다음 IE에서 열었는데 500.23 오류가 보고되었습니다. 통합에서는 ASP.NET을 적용할 수 없습니다. 호스팅 파이프라인 모드가 감지되었습니다. 배경은 여기에 기록된 IIS7과 tomcat7이 통합된 환경입니다.
HTTP 오류 500.23 - 내부 서버 오류
통합 호스팅 파이프라인 모드에 적용할 수 없는 ASP.NET 설정이 감지되었습니다.
위 오류는 왜 발생하나요?
IIS7의 응용 프로그램 풀에는 두 가지 모드가 있습니다. 하나는 "통합 모드"이고 다른 하나는 "클래식 모드"입니다.
클래식 모드는 우리에게 익숙한 IIS 6 방식입니다.
통합 모드를 사용하는 경우 사용자 정의 httpModules 및 httpHandler에 대한 구성 파일을 수정하고 이를
두 가지 솔루션:
첫 번째 방법은 응용 프로그램 풀을 구성하는 것입니다.
IIS7에서 응용 프로그램 풀을 구성하고 응용 프로그램 풀 모드를 "클래식"으로 변경합니다.” 그 후 모든 것이 잘되었습니다. 그림에 표시된 대로:
IIS7. 다음 해결 방법을 시도합니다.
두 번째 방법은 web.config 구성 파일을 수정합니다.
참고: web.config 경로 C:inetpubwwwrootweb.config
예를 들어 원래 설정(사용자 환경에 httpModules, httpHandlers 노드가 없을 수 있음)
<system.web> ............ <httpModules> <add name="MyModule"type="MyApp.MyModule" /> </httpModules> <httpHandlers> <add path="*.myh"verb="GET"type="MyApp.MyHandler" /> </httpHandlers> </system.web>
IIS7 응용 프로그램 풀이 "통합 모드"인 경우
<system.web> ........... </system.web> <system.webServer> <modules> <add name="MyModule"type="MyApp.MyModule" /> </modules> <handlers> <add name="MyHandler"path="*.myh"verb="GET"type="MyApp.MyHandler"preCondition="integratedMode" /> </handlers> </system.webServer>
으로 변경합니다. (web.config에 httpModules 또는 httpHandlers 노드가 없는 경우 system.webServer 노드에 직접 추가합니다.
<validation validateIntegratedModeConfiguration="false" />
오류를 방지하려면 통합 모드 확인을 비활성화하세요.
IIS 로그 위치
IIS 6.0의 로그는
c:windowssystem32logfiles
에 저장됩니다. IIS 7의 로그는 다음 위치에 저장됩니다:
%SystemDrive%inetpublogsLogFiles
테스트 후 IIS 로그가 즉시 기록되며 IIS 재설정이 필요하지 않습니다.
IIS 6 및 7 로그는 사이트에 따라 다른 폴더에 기록됩니다. 위치 폴더의 형식은 "w3svc{ siteId}"입니다.
IIS6에서 사이트 ID를 보는 방법은 다음과 같습니다. IIS 로그 폴더 이름을 통해 사이트 ID를 확인합니다.
IIS7에서는 IIS 관리에서 브라우저의 고급 설정에서 일반에 있는 ID가 사이트 ID입니다. 이 ID를 사용하면 보려는 사이트에 속하는 LogFiles 폴더를 찾을 수 있습니다.
통합과 클래식의 차이점
IIS7의 응용 프로그램 풀에는 두 가지 모드가 있는데 하나는 통합입니다. 다른 하나는 통합 모드를 사용하는 경우 사용자 정의 httpModules 및 httpHandlers에 대한 구성 파일을 수정해야 하며 차이점은 무엇입니까? IIS7과 IIS6의 두 가지 모드 사이에 있습니까?
IIS7.0 통합 모드: asp.net의 모듈과 핸들러는
IIS7.0 클래식 모드: 위의 상황과 반대로
클래식 vs 통합
클래식 모드(IIS6 이하의 유일한 모드)는 IIS가 ISAPI 확장 및 ISAPI 필터와만 직접 작동하는 모드입니다. justan ISAPI 확장(aspnet_isapi.dll) 및 ISAPI 필터(aspnet_filter.dll).IIS는 Asp.net을 ISAPI에 구현된 외부 플러그인으로 처리하고 블랙박스처럼 작동합니다(요청을 제공해야 할 때만). toASP .NET) 이 모드에서 Asp.net은 PHP 또는 IIS용 다른 기술과 크게 다르지 않습니다.
클래식 모드는 IIS6.0 이하의 유일한 작업 모드입니다(오직 작동함). ISAPI 확장, ISAPI 필터(확장, ISAPI 필터 아래). 이 모드에서 asp.net은 ISAPI EXTENSION 및 ISAPI FILTER를 각각 구현하는 플러그인(aspnet_isapi.dll, aspnet_filter.dll)일 뿐입니다. II의 작업은 Asp.net에 특정 요청을 전달하고 이를 호스팅하는 것뿐입니다. IIS의 PHP 등.
반면에 통합 모드는 IIS 파이프라인이 Asp.net 요청 파이프라인과 긴밀하게 통합된(즉, 동일함) IIS7의 새로운 모드입니다. ASP.NET은 원하는 모든 요청을 확인하고 그에 따라 조작할 수 있습니다. ASP.NET은 더 이상 외부 플러그인으로 취급되지 않습니다. 이 모드에서 Asp.net HttpModules는 기본적으로 ISAPI 필터와 Asp.net HttpHandler가 가질 수 있는 만큼의 강력한 기능을 제공합니다. ISAPI 확장과 거의 동일한 기능을 갖습니다. 이 모드에서 Asp.net은 기본적으로 IIS의 일부입니다.
그러나 통합 모드에서는 IIS 파이프라인이 Asp.net과 긴밀하게 통합됩니다. 요청 파이프라인. .net은 전체 요청 파이프라인에 대한 모든 권한과 액세스 권한을 갖습니다. Asp.net은 더 이상 외부 플러그인이 아니지만 IIS에 완전히 통합되었습니다. 이 모드에서는 Asp.net HttpModules과 ISAPI Filter가 동일한 제어 권한을 가지며 Asp.net HttpHandlers와 ISAPI Extension은 동일한 제어 권한을 갖습니다. 즉, Asp.net은 이미 IIS의 일부입니다.
IIS6과 IIS7을 모두 고려하려면 web.config의 httpHandler(IIS6용)와 핸들러(IIS7용)에서 동일한 정의를 유지할 수 있지만 , 그렇지 않으면 IIS7에서 반복되는 정의로 인해 오류가 발생합니다.
IIS7에서 보고된 500.23 오류의 원인 분석 및 해결 방법에 대한 더 많은 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!