자세한 500 오류 메시지, ASP + IIS 7.5


192

IIS 7.5, 2008rc2, 클래식 ASP, 500 오류 메시지 :

내부 서버 오류가 발생하여 페이지를 표시 할 수 없습니다.

좀 더 자세한 오류를 얻으려면 IIS를 구성하는 방법을 알아야합니다.
ASP 구성의 모든 디버깅 옵션을 true로 설정하려고했습니다.
그러나 그것은 효과가 없었습니다. 누구든지 나를 도울 수 있습니까?


텍스트 파일에 오류를 기록하는 다른 방법을 사용하고 있습니다 : stackoverflow.com/questions/20475502/… 주요 차이점-오류 정보는 텍스트 파일에 저장됩니다
Zam

답변:


231

나는 같은 문제에 직면했고 Alex K와 같은 방식으로 고쳤다 .

"브라우저에 오류 보내기"가 작동하지 않으면 다음과 같이 설정하십시오.

오류 페이지-> 500-> 기능 설정 편집-> "상세한 오류"

여기에 이미지 설명을 입력하십시오

또한 전송 된 오류 페이지의 내용이 매우 짧고 IE를 사용하는 경우 IE는 서버에서 전송 된 유용한 내용을 무시하고 대신 일반적인 오류 페이지를 표시합니다. IE의 옵션에서 이것을 끄거나 다른 브라우저를 사용할 수 있습니다.


9
그것은 여전히 작동하지 않는 경우 비활성화 HTTP 오류 메시지
팀 파트 리지를

3
패널에 "오류 페이지"가없는 경우 기능이 활성화되어 있는지 확인하십시오. Windows 기능 켜거나 끄기 => WWW 서비스, 공통 HTTP 기능, [x] HTTP 오류
fiat

1
@fiat "오류 페이지"를 활성화하려면 다음을 수행해야합니다 Turn Windows features on or off > Internet Information Services > World Wide Web Services > Common HTTP Features > [✓] HTTP Errors..
Jess Telford

참고 : "오류 페이지"".NET 오류 페이지" 는 다릅니다. 특히 "오류 페이지"가 ​​필요 합니다.
Jess Telford

NET 오류 페이지에HOW-TO 대한 @JessTelford ?
Kiquenet

94

원격 서버에있는 경우 다음과 같이 web.config 파일을 구성 할 수 있습니다.

<configuration>
<system.webServer>
    <httpErrors errorMode="Detailed" />
    <asp scriptErrorSentToBrowser="true"/>
</system.webServer>
<system.web>
    <customErrors mode="Off"/>
    <compilation debug="true"/>
</system.web>


1
사실, <system.webserver>제 경우 에는 설정이 충분했습니다. 감사합니다.
마라 펫

4
system.webServer섹션은 클래식 ASP를 실행할 때도 IIS 7 이상에서 읽습니다
Tim Lewis

2
customErrors mode = "Off"나를 위해 그것을했다
spankmaster79

더 이상 사용할 필요가 없습니다 customErrors(예 : IIS 7+, ASP.NET, Classic AppPool ) tedgustaf.com/blog/2011/5/…
Kiquenet

49

IIS 관리자의 사이트 홈 화면에서 "ASP"를 두 번 클릭하고 "디버깅 속성"을 펼친 후 "오류를 브라우저로 보내기"를 활성화 한 다음 "적용"을 클릭하십시오.

홈 화면의 "오류 페이지"에서 "500"을 선택한 다음 "기능 설정 편집"을 선택하고 "상세 오류"를 선택하십시오.

IIS 8.0 (Windows Server 2012)에도 동일한 단계가 적용됩니다.


CLASSIC AppPool (통합되지 않은)을 사용 하는 IIS 7.5, Windows 2008 R2, ASP.NET 4.5.1 (WebForms)에 적용 가능
Kiquenet


20

에서 의 Web.config 에서

<system.webServer>

줄을 바꾸거나 추가하십시오

<httpErrors errorMode="Detailed"></httpErrors>

<httpErrors existingResponse="PassThrough" errorMode="Detailed"></httpErrors>

IIS7은 기본적으로 응용 프로그램에서 생성 된 4xx 및 5xx와 같은 HTTP 상태 코드를 파이프 라인 위로 가로 채기 때문입니다.

그런 다음 "ASP"섹션에서 " 브라우저로 오류 보내기 "를 활성화 하고 " 오류 페이지 / 기능 설정 편집 "에서 "상세 오류"를 선택하십시오.

또한 웹 사이트 폴더에 대한 쓰기 권한IIS_IUSRS 기본 제공 그룹에 부여하십시오.


1
Power Shell 사용자에 해당하는 경우 다음을 실행하십시오.Set-WebConfigurationProperty '/system.WebServer/httpErrors' -Name errorMode -Value Detailed
Blaskovicz

20

TLDR : 먼저 파이프 라인에서 오류가 발생하는 위치를 확인하고 (오류와 유사한 화면의 스크린 샷을 스크롤하여 스크롤) 새로운 것을 가져 오기 위해 변경을 반복하십시오.

먼저 실제로 어떤 오류 메시지가 표시되는지 확인하십시오.

여기에있는 파일이 보이면 ...

% SystemDrive % \ inetpub \ custerr \\ 500.htm

... 일반적으로 다음과 같습니다.

IIS 기본 500 오류

... ** IIS에 현재 구성된 오류 페이지가 표시됩니다 ** ASP.net customErrors 설정, ASP 오류 세부 사항 설정 또는 "친숙한 HTTP 오류"브라우저 설정을 변경할 필요가 없습니다.

누군가 스크린 샷을 변경 한 경우를 대비하여 스크린 샷을 신뢰하는 대신 위의 참조 경로를보고 싶을 수도 있습니다.

"예, 위에서 설명한 오류가 보입니다 ..."

이 경우 < httpErrors > 또는 IIS 관리자에서 오류 페이지 -> 기능 설정 편집 설정이 표시됩니다. 이에 대한 기본값은 서버 노드 수준 (사이트 수준이 아닌) 에서 errorMode = DetailedLocalOnly 입니다. 즉, 원격 상태에서이 구성된 오류 페이지가 표시되지만 서버에 로컬로 로그온하여 전체를 볼 수 있어야합니다. 다음과 같은 오류가 발생합니다.

자세한 HTTP 오류

현재 오류를 수정하기 위해 해당 시점에 필요한 모든 것이 있어야합니다.

"하지만 서버를 탐색해도 자세한 오류가 표시되지 않습니다"

그것은 몇 가지 가능성을 남깁니다.

  1. 서버에서 사용중인 브라우저는 연결 설정에서 프록시를 사용하도록 구성되어 있으므로 "로컬"로 표시되지 않습니다.
  2. 실제로 탐색하려는 사이트를 탐색하지는 않습니다. 일반적으로로드 밸런서가 관련된 경우에 발생합니다. ping 확인을 수행하여 dns가 서버 또는 다른 곳에서 IP를 제공하는지 확인하십시오.
  3. 귀하는 사이트의 httpErrors 설정이 "사용자 정의"로만 설정되어 있습니다. "DetailedLocalOnly"로 변경하십시오. 그러나 구성 오류가있는 경우 사이트 레벨 httpErrors도 구성 항목이므로 작동하지 않을 수 있습니다. 이 경우 # 4로 진행하십시오.
  4. 모든 사이트에 대한 httpErrors 의 기본값은 "Custom"으로 설정되어 있습니다. 이 경우 특정 사이트가 아닌 IIS 관리자에서 최상위 서버 노드를 클릭하고 httpErrors를 변경해야합니다. 설정을 DetailedLocalOnly로 . 이 서버가 내부 서버이고 민감한 정보를 공개 할까 걱정하지 않으면 "상세 정보"로 설정하여 서버 이외의 클라이언트에서 발생한 오류를 볼 수도 있습니다.
  5. UrlRewrite와 같은 서버에 모듈이 없습니다 (이 모듈은 나에게 많은 물림을 주며 httpErrors 설정에 관계없이 일반적인 메시지를 제공합니다).

"서버 로그온은 옵션이 아닙니다"

원격으로 볼 수 있도록 사이트의 httpErrors 를 "Detailed"로 변경하십시오 . 그러나 작동하지 않으면 오류가 이미 구성 오류 일 수 있습니다. 위의 # 3을 참조하십시오. 따라서 # 4 또는 # 5에 갇혀있을 수 있으며 서버 팀원이 필요합니다.

"위에서 설명한 오류 페이지가 표시되지 않습니다. 다른 내용이 표시됩니다."

이걸 보면 ...

여기에 이미지 설명을 입력하십시오

... 그리고 당신은 이와 같은 것을 보게 될 것입니다 ...

여기에 이미지 설명을 입력하십시오

... 그런 다음 IIS 관리자의 사이트-> IIS-> ASP-> 디버깅 속성에서 "오류를 브라우저로 보내기"를 true로 변경해야합니다.

이걸 보면 ...

즉 친절한 오류 1

아니면 이거...

즉, 친숙한 오류 2

... 브라우저에서 친숙한 오류를 비활성화하거나 피들러의 웹뷰를 사용하여 실제 응답 과 브라우저가 표시하도록 선택한 것을 확인해야합니다.

이걸 보면 ...

맞춤 오류 사용

... 사용자 정의 오류는 작동하지만 사용자 정의 오류 페이지가 없습니다 (물론이 시점에서 클래식 ASP가 아닌 .net에 대해 이야기했습니다). 서버에서 보려면 web.config의 customErrors 태그를 RemoteOnly로 변경하거나 원격으로 보려면 Off로 변경해야합니다.

사이트와 같은 스타일의 것이 있으면 사용자 정의 오류가 On 또는 RemoteOnly 일 가능성이 있으며 사용자 정의 페이지가 표시됩니다 (예 : MVC의 Views-> Shared-> Error.cshtml). 즉, 누군가가 IIS에서 httpErrors에 대한 페이지를 변경했을 가능성은 거의 없으므로 첫 번째 섹션을 참조하십시오.


9

"existingResponse"httpErrors 속성 값을 "PassThrough"로 설정하십시오. YSOD가 표시되지 않는 "바꾸기"로 광산을 설정했습니다.

<httpErrors errorMode="Detailed" existingResponse="PassThrough">

2
customErrors는 asp.net에 대한 것입니다. httpErrors는 IIS7에 대한 것이므로 .net 핸들러를 통과하지 않는 컨텐츠 (예 : .png, .js 등)를 처리하십시오. .net이 아닌 컨텐츠 유형에 대한 오류 페이지를 원하는 경우 IIS 오류 페이지 (IIS7의 httpErrors)를 사용하십시오. .net 코드에서 예외 (404, 403, 500 등)가 발생하면 customErrors 속성이 사용되며 IIS 자체에서 예외가 발생하면 httpErrors 속성이 사용됩니다. IIS7은 기본적으로 응용 프로그램에서 생성 된 4xx 및 5xx와 같은 HTTP 상태 코드를 파이프 라인 위로 가로 채기 때문입니다.
Kiquenet

6

아무도 언급하지 않은 한 가지는 매우 신속하고 임시적인 수정입니다. 해당 웹 서버의 로컬 호스트에서 오류를 볼 수 있습니다.


1
Vaclav의 답변에 표시되는 세 번째 옵션 이 선택된 경우입니다.
ricksmt

3

기본 웹 사이트 폴더 ( c:\inetpub\wwwroot)를 다른 폴더로 변경 한 경우 새 폴더 의 IIS_IUSRS 그룹 에 대한 읽기 권한을 부여해야 합니다.


3

모든 것을 시도했지만 오류 세부 정보를 표시 할 수없는 사람들은 나와 같이 다른 수준의 구성을 확인하는 것이 좋습니다. 웹 사이트 수준 및 응용 프로그램 수준 (웹 사이트 내부)에 구성 파일이 모두 있습니다. 또한 IIS에서 가장 높은 노드에서 자세한 오류가 비활성화되었습니다 (시작 페이지 바로 아래에 웹 서버 컴퓨터 이름과 동일한 이름이 있음). 오류 페이지를 확인하십시오.



1

서버에서 브라우저를 실행하고 로컬 IP로 프로젝트의 URL을 테스트하면 일반적으로 오류 페이지 (예 : 500 오류 페이지)없이 해당 프로젝트의 모든 오류가 수신됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.