Szczegółowy komunikat o błędzie 500, ASP + IIS 7.5

192

IIS 7.5, 2008rc2, klasyczny asp, 500 błędów msg:

Nie można wyświetlić strony, ponieważ wystąpił wewnętrzny błąd serwera.

Muszę wiedzieć, jak skonfigurować usługi IIS, aby uzyskać bardziej szczegółowy błąd.
Próbowałem ustawić wartość true wszystkich opcji debugowania w konfiguracji ASP.
Ale to nie zadziałało. Czy ktoś może mi pomóc?

egidiocs
źródło
Używam innego sposobu rejestrowania błędu w pliku tekstowym: stackoverflow.com/questions/20475502/… Główna różnica - informacja o błędzie zostanie zapisana w pliku tekstowym
Zam

Odpowiedzi:

231

Doszedłem do tego samego problemu i ustalił samo jak Alex K .

Jeśli więc „Wyślij błędy do przeglądarki” nie działa, ustaw również:

Strony błędów -> 500 -> Edytuj ustawienia funkcji -> „Błędy szczegółowe”

wprowadź opis zdjęcia tutaj

Zauważ też, że jeśli treść odesłanej strony błędu jest dość krótka i używasz IE, IE z przyjemnością zignoruje przydatną treść odesłaną przez serwer i wyświetli zamiast tego swoją własną stronę błędu ogólnego. Możesz to wyłączyć w opcjach IE lub użyć innej przeglądarki.

Vaclav Elias
źródło
9
Jeśli nadal nie działa, wyłącz przyjazne komunikaty o błędach http
Tim Partridge
3
Jeśli na panelu brakuje „Stron błędów”, upewnij się, że funkcja jest włączona: Włącz lub wyłącz funkcje systemu Windows => Usługi WWW, wspólne funkcje HTTP, [x] błędy HTTP
fiat
1
@fiat Aby włączyć „Błąd strony”, miałem jechać: Turn Windows features on or off > Internet Information Services > World Wide Web Services > Common HTTP Features > [✓] HTTP Errors.
Jess Telford,
Uwaga: „Strony błędów” i „Strony błędów .NET” są różne. W szczególności potrzebujesz „Stron błędów” .
Jess Telford,
@JessTelford HOW-TOfor NET Error Pages ?
Kiquenet
94

Jeśli korzystasz z serwera zdalnego, możesz skonfigurować plik web.config w następujący sposób:

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

safhac
źródło
1
Właściwie <system.webserver>ustawienia były w moim przypadku wystarczające, dzięki.
marapet
4
system.webServerSekcja jest odczytywany przez IIS 7+ nawet podczas jazdy klasycznej ASP
Tim Lewis
2
customErrors mode = „Off” zrobił to dla mnie
spankmaster79
nie jest już konieczne używanie customErrors(np. IIS 7+, ASP.NET, Classic AppPool
Kiquenet
49

Kliknij dwukrotnie „ASP” na ekranie głównym witryny w IIS admin, rozwiń „Właściwości debugowania”, włącz „Wyślij błędy do przeglądarki” i kliknij „Zastosuj”.

W sekcji „Strony błędów” na ekranie głównym wybierz „500”, następnie „Edytuj ustawienia funkcji” i wybierz „Błędy szczegółowe”.

Należy pamiętać, że te same kroki dotyczą IIS 8.0 (Windows Server 2012).

Alex K.
źródło
Może dotyczy IIS 7.5, Windows 2008 R2, ASP.NET 4.5.1 (WebForms) z CLASSIC AppPool (NIE zintegrowane)
Kiquenet
43

Po wypróbowaniu odpowiedzi Vaclava i Alexa nadal musiałem wyłączyć „Pokaż przyjazne komunikaty o błędach HTTP” w IE

wprowadź opis zdjęcia tutaj

Tim Partridge
źródło
20

W pliku web.config pod

<system.webServer>

zamień (lub dodaj) linię

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

z

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

Wynika to z faktu, że IIS7 domyślnie przechwytuje kody stanu HTTP, takie jak 4xx i 5xx, generowane przez aplikacje znajdujące się w dalszej części potoku.

Następnie włącz opcję „ Wyślij błędy do przeglądarki ” w sekcji „ASP”, aw obszarze „ Strony błędów / Edytuj ustawienia funkcji ” wybierz opcję „Błędy szczegółowe”.

Nadaj także uprawnienia do zapisu w folderze strony internetowej wbudowanej grupie IIS_IUSRS .

Niente00
źródło
1
Aby uzyskać ekwiwalent użytkownika powłoki mocy, uruchom:Set-WebConfigurationProperty '/system.WebServer/httpErrors' -Name errorMode -Value Detailed
Blaskovicz
20

TLDR: Najpierw określ, skąd pochodzi błąd (przewiń w poszukiwaniu zrzutów ekranu czegoś, co przypomina błąd), wprowadź zmiany, aby uzyskać coś nowego, powtórz.

Najpierw określ, jaki komunikat o błędzie rzeczywiście się wyświetla.

Jeśli widzisz plik znajdujący się tutaj ...

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

... który ogólnie wygląda tak:

Błąd domyślny 500 IIS

... wtedy wiesz, że widzisz aktualnie skonfigurowaną stronę błędu w ** IIS ** i NIE musisz zmieniać ustawienia niestandardowych błędów ASP.net, ustawienia szczegółów błędu asp lub ustawienia przeglądarki „pokaż przyjazne błędy http”.

Możesz spojrzeć na powyższą ścieżkę zamiast ufać mojemu zrzutowi ekranu na wypadek, gdyby ktoś go zmienił.

„Tak, widzę opisany wyżej błąd ...”

W tym przypadku widzisz ustawienie < httpErrors > lub w Menedżerze IIS są to Strony błędów -> Edytuj ustawienia funkcji. Domyślnie jest to errorMode = DetailedLocalOnly na poziomie węzła serwera (w przeciwieństwie do poziomu witryny), co oznacza, że ​​chociaż zobaczysz tę skonfigurowaną stronę błędu w trybie zdalnym, powinieneś być w stanie zalogować się lokalnie na serwerze i zobaczyć pełne błąd, który powinien wyglądać mniej więcej tak:

Szczegółowy błąd HTTP

Powinieneś mieć wszystko, czego potrzebujesz w tym momencie, aby naprawić bieżący błąd.

„Ale nie widzę szczegółowego błędu nawet podczas przeglądania na serwerze”

To pozostawia kilka możliwości.

  1. Przeglądarka, której używasz na serwerze, jest skonfigurowana do używania proxy w ustawieniach połączenia, więc nie jest postrzegana jako „lokalna”.
  2. W rzeczywistości nie przeglądasz witryny, do której myślisz, że przeglądasz - dzieje się tak zwykle, gdy zaangażowany jest moduł równoważenia obciążenia. Wykonaj test ping, aby sprawdzić, czy dns daje adres IP na serwerze lub w innym miejscu.
  3. Ustawienia httpErrors Twojej witryny są ustawione tylko na „Niestandardowe”. Zmień go na „DetailedLocalOnly”. Jeśli jednak wystąpi błąd konfiguracji, może to nie działać, ponieważ httpErrors na poziomie witryny jest również elementem konfiguracji. W takim przypadku przejdź do # 4
  4. Domyślne ustawienie httpErrors dla wszystkich witryn jest ustawione na „Niestandardowe”. W takim przypadku musisz kliknąć węzeł serwera najwyższego poziomu w Menedżerze IIS (a nie konkretnej stronie) i zmienić tam ustawienia httpErrors na DetailLocalOnly . Jeśli jest to serwer wewnętrzny i nie obawiasz się ujawnienia poufnych informacji, możesz również ustawić je na „Szczegółowe”, co pozwoli ci zobaczyć błąd od klientów innych niż serwer.
  5. Brakuje modułu na serwerze, takiego jak UrlRewrite (ten bardzo mnie gryzie i często daje ogólny komunikat, niezależnie od ustawień httpErrors).

„Logowanie się do serwera nie jest dla mnie opcją”

Zmień httpErrors swojej witryny na „Szczegółowe”, abyś mógł zobaczyć je zdalnie. Ale jeśli to nie działa, twój błąd może być już błędem konfiguracji, patrz punkt 3 powyżej powyżej. Więc możesz utknąć z # 4 lub # 5 i będziesz potrzebować kogoś z zespołu serwerów.

„Nie widzę strony błędu opisanej powyżej. Widzę coś innego”

Jeśli to zobaczysz ...

wprowadź opis zdjęcia tutaj

... i spodziewasz się zobaczyć coś takiego ...

wprowadź opis zdjęcia tutaj

... musisz zmienić „Wyślij błędy do przeglądarki” na „prawda” w Menedżerze usług IIS, w obszarze Witryna -> IIS -> ASP -> Właściwości debugowania

Jeśli to zobaczysz ...

tj. przyjazne błędy 1

albo to...

tj. przyjazne błędy 2

... musisz wyłączyć przyjazne błędy w przeglądarce lub użyć podglądu strony skrzypka, aby zobaczyć rzeczywistą odpowiedź w stosunku do tego, co przeglądarka chce Ci pokazać.

Jeśli to zobaczysz ...

Włączone błędy niestandardowe

... wtedy niestandardowe błędy działają, ale nie masz niestandardowej strony błędów (oczywiście w tym momencie mówiliśmy o .net, a nie o klasycznym asp). Musisz zmienić tag customErrors w pliku web.config na RemoteOnly, aby wyświetlić na serwerze, lub Off, aby wyświetlić zdalnie.

Jeśli widzisz coś, co ma styl podobny do Twojej witryny, wówczas niestandardowe błędy są prawdopodobnie włączone lub zdalne tylko i wyświetlają niestandardową stronę (na przykład Widoki-> Udostępnione-> Błąd.cshtml w MVC). To powiedziawszy, jest mało prawdopodobne, ale możliwe, że ktoś zmienił strony w IIS dla httpErrors, więc zobacz pierwszą sekcję na ten temat.

b_levitt
źródło
9

spróbuj ustawić wartość atrybutu „Istniejące odpowiedzi” na „PassThrough”. Mój został ustawiony na „Zamień”, co powodowało, że YSOD się nie wyświetlał.

<httpErrors errorMode="Detailed" existingResponse="PassThrough">
Dana Benson
źródło
2
Błędy customErrors dotyczą asp.net. Błędy http są dla IIS7, więc obsługują zawartość, która nie przechodzi przez procedurę obsługi .net (np. png, .js itp.) Jeśli chcesz mieć strony błędów dla typów treści innych niż.net, użyj stron błędów IIS (httpErrors dla IIS7 , interfejs użytkownika dla IIS6.) Atrybut customErrors jest używany, gdy kod .net zgłasza wyjątek (404, 403, 500 itd.), a atrybut httpErrors jest używany, gdy sam IIS zgłasza wyjątek. Jest tak, ponieważ domyślnie IIS7 przechwytuje kody stanu HTTP, takie jak 4xx i 5xx, generowane przez aplikacje znajdujące się w dalszej części potoku.
Kiquenet
6

Jedną rzeczą, o której nikt nie wspominał, jest bardzo szybka i tymczasowa poprawka, możesz zobaczyć błąd na lokalnym hoście tego serwera WWW.

RandomUs1r
źródło
1
To jest, jeśli wybrano trzecią opcję widoczną w odpowiedzi Vaclava .
ricksmt
3

Możesz także zweryfikować, że jeśli zmieniłeś główny folder strony internetowej ( c:\inetpub\wwwroot) na inny folder, musisz dać uprawnienia do odczytu grupie IIS_IUSRS w nowym folderze.

Rogerio Barretto
źródło
3

Fot ludzi, którzy wypróbowali WSZYSTKO, ale NIE MOŻNA uzyskać szczegółowych informacji o błędach, tak jak ja, warto sprawdzić różne poziomy konfiguracji. Mam plik konfiguracyjny na poziomie strony internetowej i na poziomie aplikacji (wewnątrz strony internetowej) sprawdź oba. Ponadto, jak się okazało, wyłączono Błędy szczegółowe w najwyższym węźle w IIS (tuż pod Stroną początkową, ma taką samą nazwę jak nazwa komputera serwera). Sprawdź tam strony błędów.

Jon Koeter
źródło
1

Jeśli uruchomisz przeglądarkę na serwerze i przetestujesz swój adres URL projektu za pomocą lokalnego adresu IP, otrzymałeś wszystkie błędy tego projektu bez ogólnie strony błędu (na przykład 500 strony błędu).

Ali Rasouli
źródło