Detaillierte 500-Fehlermeldung, ASP + IIS 7.5

192

IIS 7.5, 2008rc2, klassischer Asp, 500 Fehlermeldung:

Die Seite kann nicht angezeigt werden, da ein interner Serverfehler aufgetreten ist.

Ich muss wissen, wie ich IIS konfiguriere, um einen detaillierteren Fehler zu erhalten.
Ich habe versucht, alle Debugging-Optionen in der ASP-Konfiguration auf true zu setzen.
Aber das hat nicht funktioniert. Kann mir jemand helfen?

egidiocs
quelle
Ich verwende verschiedene Methoden , um Fehler in der Textdatei zu protokollieren: stackoverflow.com/questions/20475502/… Hauptunterschied - Fehlerinformationen werden in der Textdatei gespeichert
Zam

Antworten:

231

Ich bin zum selben Problem gekommen und habe den gleichen Weg wie Alex K behoben .

Wenn "Fehler an Browser senden" nicht funktioniert, stellen Sie auch Folgendes ein:

Fehlerseiten -> 500 -> Funktionseinstellungen bearbeiten -> "Detaillierte Fehler"

Geben Sie hier die Bildbeschreibung ein

Beachten Sie auch, dass der IE den vom Server zurückgesendeten nützlichen Inhalt gerne ignoriert und Ihnen stattdessen eine eigene generische Fehlerseite anzeigt, wenn der Inhalt der zurückgesendeten Fehlerseite recht kurz ist und Sie den IE verwenden. Sie können dies in den IE-Optionen deaktivieren oder einen anderen Browser verwenden.

Vaclav Elias
quelle
9
Wenn es immer noch nicht funktioniert, deaktivieren Sie freundliche http-Fehlermeldungen
Tim Partridge
3
Wenn "Fehlerseiten" in Ihrem Panel fehlen, stellen Sie sicher, dass die Funktion aktiviert ist: Schalten Sie die Windows-Funktionen ein oder aus => WWW-Dienste, Allgemeine HTTP-Funktionen, [x] HTTP-Fehler
Fiat
1
@fiat Um "Error Pages" zu aktivieren, musste ich gehen : Turn Windows features on or off > Internet Information Services > World Wide Web Services > Common HTTP Features > [✓] HTTP Errors.
Jess Telford
Hinweis: "Fehlerseiten" und ".NET-Fehlerseiten" sind unterschiedlich. Sie möchten speziell "Fehlerseiten" .
Jess Telford
@ JessTelford HOW-TOfür NET-Fehlerseiten ?
Kiquenet
94

Wenn Sie sich auf einem Remote-Server befinden, können Sie Ihre web.config-Datei folgendermaßen konfigurieren:

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

Safhac
quelle
1
Eigentlich waren die <system.webserver>Einstellungen in meinem Fall ausreichend, danke.
Marapet
4
Der system.webServerAbschnitt wird von IIS 7+ gelesen, auch wenn klassischer ASP ausgeführt wird
Tim Lewis
2
customErrors mode = "Off" hat es für mich
getan
tedgustaf.com/blog/2011/5/…customErrors
Kiquenet
49

Doppelklicken Sie im IIS-Administrator auf dem Startbildschirm der Site auf "ASP", erweitern Sie "Debugging-Eigenschaften", aktivieren Sie "Fehler an Browser senden" und klicken Sie auf "Übernehmen".

Wählen Sie unter "Fehlerseiten" auf dem Startbildschirm "500", dann "Funktionseinstellungen bearbeiten" und dann "Detaillierte Fehler".

Beachten Sie, dass für IIS 8.0 (Windows Server 2012) dieselben Schritte gelten.

Alex K.
quelle
Gilt möglicherweise für IIS 7.5, Windows 2008 R2, ASP.NET 4.5.1 (WebForms) mit CLASSIC AppPool (NICHT integriert)
Kiquenet
43

Nachdem ich die Antwort von Vaclav und Alex ausprobiert hatte , musste ich im IE immer noch "Freundliche HTTP-Fehlermeldungen anzeigen" deaktivieren

Geben Sie hier die Bildbeschreibung ein

Tim Partridge
quelle
20

In web.config unter

<system.webServer>

Ersetzen (oder Hinzufügen) der Zeile

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

mit

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

Dies liegt daran, dass IIS7 standardmäßig HTTP-Statuscodes wie 4xx und 5xx abfängt, die von Anwendungen weiter oben in der Pipeline generiert werden.

Aktivieren Sie als Nächstes " Fehler an Browser senden " im Abschnitt "ASP" und wählen Sie unter " Fehlerseiten / Funktionseinstellungen bearbeiten " die Option "Detaillierte Fehler" aus.

Geben Sie der integrierten Gruppe IIS_IUSRS außerdem Schreibberechtigungen für den Website-Ordner .

Niente00
quelle
1
Führen Sie für das Power Shell-Benutzeräquivalent Folgendes aus:Set-WebConfigurationProperty '/system.WebServer/httpErrors' -Name errorMode -Value Detailed
Blaskovicz
20

TLDR: Bestimmen Sie zuerst, woher in der Pipeline der Fehler stammt (scrollen Sie nach Screenshots von etwas, das Ihrem Fehler ähnelt), nehmen Sie Änderungen vor, um etwas Neues zu erhalten, und wiederholen Sie den Vorgang.

Stellen Sie zunächst fest, welche Fehlermeldung tatsächlich angezeigt wird.

Wenn Sie die Datei hier sehen ...

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

... was im Allgemeinen so aussieht:

IIS Default 500-Fehler

... dann wissen Sie, dass die aktuell konfigurierte Fehlerseite in ** IIS ** angezeigt wird, und Sie müssen die Einstellung für benutzerdefinierte ASP.net-Fehler, die Asp-Fehlerdetaileinstellung oder die Browsereinstellung "Anzeigen freundlicher HTTP-Fehler" NICHT ändern.

Vielleicht möchten Sie sich den oben genannten Pfad ansehen, anstatt meinem Screenshot zu vertrauen, falls jemand ihn geändert hat.

"Ja, ich sehe den oben beschriebenen Fehler ..."

In diesem Fall wird die Einstellung < httpErrors > angezeigt, oder im IIS-Manager werden die Fehlerseiten -> Funktionseinstellungen bearbeiten angezeigt. Die Standardeinstellung hierfür ist errorMode = DetailedLocalOnly auf Serverknotenebene (im Gegensatz zur Site-Ebene). Dies bedeutet, dass Sie diese konfigurierte Fehlerseite auf der Remote-Seite sehen können, sich jedoch lokal beim Server anmelden und die vollständige Seite anzeigen können Fehler, der ungefähr so ​​aussehen sollte:

Detaillierter HTTP-Fehler

Sie sollten zu diesem Zeitpunkt über alles verfügen, was Sie zur Behebung des aktuellen Fehlers benötigen.

"Aber ich sehe den detaillierten Fehler nicht einmal beim Surfen auf dem Server."

Das lässt ein paar Möglichkeiten.

  1. Der Browser, den Sie auf dem Server verwenden, ist so konfiguriert, dass er in seinen Verbindungseinstellungen einen Proxy verwendet, sodass er nicht als "lokal" angesehen wird.
  2. Sie navigieren nicht zu der Site, zu der Sie zu navigieren glauben. Dies geschieht normalerweise, wenn ein Load Balancer beteiligt ist. Führen Sie eine Ping-Überprüfung durch, um festzustellen, ob DNS Ihnen eine IP auf dem Server oder an einem anderen Ort gibt.
  3. Die httpErrors- Einstellungen Ihrer Site sind nur auf "Benutzerdefiniert" eingestellt. Ändern Sie es in "DetailedLocalOnly". Wenn Sie jedoch einen Konfigurationsfehler haben, funktioniert dies möglicherweise nicht, da httpErrors auf Site-Ebene auch ein Konfigurationselement ist. In diesem Fall fahren Sie mit Schritt 4 fort
  4. Der Standardwert für httpErrors für alle Websites ist "Benutzerdefiniert". In diesem Fall müssen Sie im IIS-Manager (und nicht auf einer bestimmten Site) auf den Serverknoten der obersten Ebene klicken und dort die httpErrors- Einstellungen in DetailedLocalOnly ändern . Wenn es sich um einen internen Server handelt und Sie sich keine Sorgen um die Weitergabe vertraulicher Informationen machen, können Sie ihn auch auf "Detailliert" setzen, damit Sie den Fehler von anderen Clients als dem Server sehen können.
  5. Sie vermissen ein Modul auf dem Server wie UrlRewrite (dieses beißt mich sehr und gibt häufig die allgemeine Nachricht, unabhängig von den httpErrors-Einstellungen).

"Das Anmelden am Server ist für mich keine Option."

Ändern Sie die httpErrors Ihrer Site in "Detailliert", damit Sie sie aus der Ferne sehen können. Wenn es jedoch nicht funktioniert, handelt es sich bei Ihrem Fehler möglicherweise bereits um einen Konfigurationsfehler (siehe Nummer 3 direkt oben). Sie könnten also mit # 4 oder # 5 stecken bleiben und jemanden aus Ihrem Serverteam brauchen.

"Ich sehe die oben beschriebene Fehlerseite nicht. Ich sehe etwas anderes."

Wenn Sie das sehen ...

Geben Sie hier die Bildbeschreibung ein

... und Sie erwarten so etwas ...

Geben Sie hier die Bildbeschreibung ein

... dann müssen Sie im IIS-Manager unter Site -> IIS -> ASP -> Debugging-Eigenschaften "Fehler an Browser senden" in "true" ändern

Wenn Sie das sehen ...

dh freundliche Fehler 1

oder dieses...

dh freundliche Fehler 2

... Sie müssen freundliche Fehler in Ihrem Browser deaktivieren oder die Webansicht von Fiddler verwenden, um die tatsächliche Antwort im Vergleich zu den von Ihrem Browser ausgewählten Anzeigen anzuzeigen .

Wenn Sie das sehen ...

Benutzerdefinierte Fehler aktiviert

... dann funktionieren benutzerdefinierte Fehler, aber Sie haben keine benutzerdefinierte Fehlerseite (zu diesem Zeitpunkt wurde natürlich über .net und nicht über klassisches Asp gesprochen). Sie müssen Ihr customErrors-Tag in Ihrer web.config in RemoteOnly ändern, um es auf dem Server anzuzeigen, oder Off, um es remote anzuzeigen.

Wenn Sie etwas sehen, das wie Ihre Site gestaltet ist, sind benutzerdefinierte Fehler wahrscheinlich On oder RemoteOnly und es wird die benutzerdefinierte Seite angezeigt (Ansichten-> Freigegeben-> Fehler.cshtml in MVC zum Beispiel). Es ist jedoch unwahrscheinlich, aber möglich, dass jemand die Seiten in IIS für httpErrors geändert hat. Lesen Sie daher den ersten Abschnitt dazu.

b_levitt
quelle
9

Versuchen Sie, den Wert des httpErrors-Attributs "availableResponse" auf "PassThrough" zu setzen. Meins war auf "Ersetzen" eingestellt, was dazu führte, dass der YSOD nicht angezeigt wurde.

<httpErrors errorMode="Detailed" existingResponse="PassThrough">
Dana Benson
quelle
2
customErrors sind für asp.net. httpErrors sind für IIS7 und behandeln daher Inhalte, die nicht über den .net-Handler ausgeführt werden (z. B. .png, .js usw.). Wenn Sie Fehlerseiten für Nicht -.net-Inhaltstypen wünschen, verwenden Sie IIS-Fehlerseiten (httpErrors für IIS7) , die Benutzeroberfläche für IIS6.) Das Attribut customErrors wird verwendet, wenn der .net-Code eine Ausnahme auslöst (404, 403, 500 usw.), und das Attribut httpErrors wird verwendet, wenn IIS selbst eine Ausnahme auslöst. Dies liegt daran, dass IIS7 standardmäßig HTTP-Statuscodes wie 4xx und 5xx abfängt, die von Anwendungen weiter oben in der Pipeline generiert werden.
Kiquenet
6

Eine Sache, die niemand erwähnt hat, ist eine sehr schnelle und vorübergehende Lösung. Sie können den Fehler auf dem lokalen Host dieses Webservers anzeigen.

RandomUs1r
quelle
1
Dies ist der Fall, wenn die dritte in Vaclavs Antwort sichtbare Option ausgewählt ist.
Ricksmt
3

Sie können auch überprüfen, ob Sie c:\inetpub\wwwrootder Gruppe IIS_IUSRS im neuen Ordner Leseberechtigung erteilen müssen , wenn Sie Ihren Hauptwebsite- Ordner ( ) in einen anderen Ordner geändert haben .

Rogerio Barretto
quelle
3

Fot Leute, die ALLES ausprobiert haben und einfach NICHT die Fehlerdetails bekommen können, um zu zeigen, wie ich, es ist eine gute Idee, die verschiedenen Konfigurationsebenen zu überprüfen. Ich habe eine Konfigurationsdatei auf Website-Ebene und auf Anwendungsebene (innerhalb der Website) beide überprüfen. Wie sich herausstellte, waren detaillierte Fehler auf dem höchsten Knoten in IIS deaktiviert (direkt unter der Startseite hat sie den Namen, der mit dem Computernamen des Webservers identisch ist). Überprüfen Sie dort die Fehlerseiten.

Jon Koeter
quelle
1

Wenn Sie den Browser auf dem Server ausführen und Ihre URL des Projekts mit der lokalen IP testen, haben Sie alle Fehler dieses Projekts ohne eine allgemeine Fehlerseite erhalten (z. B. 500 Fehlerseiten).

Ali Rasouli
quelle