Das Debuggen von Apache/Django/WSGI-Bad Request (400) Fehler

Meine einfache Django-app funktionierte gut in den debug-Modus (manage.py runserver), und arbeitet unter WSGI+Apache auf meiner dev-box, aber wenn ich gedrängt, EC2, begann ich empfangen von intermittierenden (10-80% der Zeit) Fehler Bad Request (400) für alle URLs, die ich versuche zu der Ansicht (egal ob in meiner app oder in der Django-admin.

Wo finde ich die debug-Informationen über diese? Nichts erscheint in /var/log/apache2/error.log auch mit LogLevel=info. Ich habe Versionen, protokolliert die Anfrage Umgebung (vgl. ModWSGI Debugging-Tipps) und sehen keine großen Unterschiede.

Den verbleibenden ein Gedanke, den ich hatte, bin ich mit dem mod_wsgi von Ubuntu 12.04 (libapache2-mod-wsgi 3.3-4build1), die gebaut wurde, gegen Python 2.7.1; ich habe Python 2.7.3. Und Django ist 1,6, die neuer ist als die Ubuntu-Precise-version. Ich zögere mit dem Bau beginnen, Pakete von der Quelle, da es so schwer zu bereinigen, und diese scheinen wie die minor-version ändert...

Danke für Eure Hilfe.

(Für Referenz, hier sind die Apache-config und WSGI-Anwendungen)

Apache-config (000-default)

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www
    WSGIScriptAlias /rz /usr/local/share/rz/rz.wsgi
    ...

rz.WSGI-app

import os
import sys
import django.core.handlers.wsgi
import pprint

path = '/usr/local/share/rz'
if path not in sys.path:
    sys.path.insert(0, path)

os.environ['DJANGO_SETTINGS_MODULE'] = 'rz.settings'

class LoggingMiddleware:
    def __init__(self, application):
        self.__application = application

    def __call__(self, environ, start_response):
        errors = environ['wsgi.errors']
        pprint.pprint(('REQUEST', environ), stream=errors)

        def _start_response(status, headers, *args):
            pprint.pprint(('RESPONSE', status, headers), stream=errors)
            return start_response(status, headers, *args)

        return self.__application(environ, _start_response)

application = LoggingMiddleware(django.core.handlers.wsgi.WSGIHandler())
set DEBUG = FALSE in django Einstellung Datei. und versuchen neu zu starten apache server.
Warum DEBUG=FALSE machen es zuverlässiger? Ich habe versucht einen Neustart und bin nicht zu sehen, keine Verbesserung.
ALLOW_HOSTS richtig eingestellt??? Django antwortet mit bad request, nur in prod-Modus, wenn dieser falsch eingestellt ist. Wenn es richtig arbeitet und einen Teil der Zeit - vielleicht-clients, die eine Verbindung über verschiedene Hostnamen, einige von diesen Hostnamen fehlen ALLOW_HOSTS.
Ja, Sie haben es! Vielen Dank, es war, weil die Produktion Modus erfordert, dass die Einstellung. Frage mich, warum es war zeitweise, aber...
Ich habe eine sudo apt-get update und sudo apt-get upgrade auf einem virtuellen server, und danach, bekam die 400 BAD REQUEST. Es führte mich zu diesem post, und die Lösung wurde auf hinzufügen ALLOWED_HOSTS. Ich nehme an, dies ist, weil das upgrade geändert, um Django 1.5 oder höher. Beachten Sie "Wichtig" Kommentar: "standardmäßig Django 1.3.6 und Satz 1.4.4 ALLOWED_HOSTS, damit alle hosts. Dies bedeutet, dass tatsächlich zu beheben der Sicherheitslücke sollten Sie definieren diese Einstellung sich sofort nach dem aktualisieren."

InformationsquelleAutor mrisher | 2013-12-02

Schreibe einen Kommentar