Ich habe ein Problem mit meinem aktuellen Setup ... Und das Problem ist, dass wenn ich DEBUG = False in der Django-Datei settings.py einstelle, nginx bei 500 Fehlern aufhört, Django-Tracebacks anzuzeigen, aber auch nicht unsere 500-Seite. Es wird nur der Nginx-Fehler 502 Bad Gateway angezeigt.
Ich erhalte den E-Mail-Fehler mit Traceback, obwohl ich es so konfiguriert habe, dass mir Tracebacks per E-Mail zugeschickt werden, wenn sie auftreten. Aber ich möchte den Benutzern eine schöne 500-Seite anzeigen und keinen Nginx 502-Gateway-Fehler ...
Ehrlich gesagt weiß ich nicht einmal, wo ich mit der Suche nach der Ursache des Problems beginnen soll. Ich bin bereit, alle erforderlichen Konfigurationsdateien zu posten, wenn ein Nginx-Experte vorbeikommt und mir sagt, was er sehen möchte.
alan
Edit1: Ich habe nachgeschaut, welche Protokolldatei bei einem dieser 500 Fehler angezeigt wird, und dort steht Folgendes:
[pid: 16203|app: 0|req: 1/1] my.ip.address () {46 vars in 915 bytes} [Thu Sep 12 10:01:17 2013] GET /settings/personal/ => generated 0 bytes in 1249 msecs (HTTP/1.1 500) 0 headers in 0 bytes (0 switches on core 0)
Bedeutet dies, dass es irgendwie ein Fehler von Django ist, weil es so aussieht, als hätte Django 0 Bytes zurückgegeben?
Antwort1
Bedeutet dies, dass es irgendwie ein Fehler von Django ist, weil es so aussieht, als hätte Django 0 Bytes zurückgegeben?
Ja, hier liegt kein Nginx-Problem vor. Das Problem besteht darin, dass Django nichts zurückgibt, sondern eine 500-Fehlerseite.
Antwort2
Verwenden Sie die error_page-Direktive von nginx dokumentiertHier
Damit fängt Nginx den 5XX-Fehler vom Backend ab und zeigt dem Endbenutzer jede gewünschte Seite an.
Antwort3
Ich hatte vor kurzem das gleiche Problem. Um das zu beheben, habe ich Folgendes zu den uwsgi-Startparametern hinzugefügt: –catch-exceptions und –error-route-status=”500 file:filename=/usr/local/nginx/html/index.html,status=500 Interner Serverfehler”
Eines davon war, Ausnahmen von Django abzufangen, selbst wenn DEBUG=false ist. Und das andere war, eine Anfrage an eine bestimmte Datei umzuleiten, damit der Client keine Seite voller Django-Ausnahmen sieht, sondern stattdessen eine „Es tut uns leid, bla bla“-Meldung. Bedenken Sie, dass ich die Version von uwsgi 1.9.15 verwende.