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())
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hinzufügen "ALLOWED_HOSTS" Einstellung zu Ihr settings.py wie so...
Ich hatte das gleiche problem und fand die Antwort hier in den docs
update: django 1.6 docs nicht mehr online sind, habe ich aktualisiert, der link für das django 1.7 docs für
ALLOWED_HOSTS
Einstellung.my_site.com
zu ALLOWED_HOSTS (127.0.0.1 my_site.com
in /etc/hosts), Bad Request (400) wieder erscheint. Was ist falsch?Was ist Ihre
DEBUG
eingestellt? Wenn Sie den Zugriff auf Ihre website via "my_site.com' gibt es eine Einstellung, ändern Sie den Wert vonDEBUG
? Könnte Ihre sein einen Tippfehler in denALLOWED_HOSTS
Einstellung? Ich brauche mehr info 🙂 Meine Vermutung ist, Sie haben einen Tippfehler in IhremALLOWED_HOSTS
Einstellung und es ignoriert, wenn Sie versuchen, um Ihre website zugreifen, über '127.0.0.1', denn das ist die Einstellung DEBUG auf False. Wenn Sie versuchen, die Website zugreifen, über 'my_site.com' DEBUGGEN wird immer auf True gesetzt und mitALLOWED_HOSTS
hat einen Typ. Sie haben '.my_site.com' oder 'mysite.com'?DEBUG auf False gesetzt. Ich erstellte ein neues sauberes Projekt für die Prüfung, so kann nichts mehr ändern Sie den Wert von DEBUG (zumindest hoffe ich das). Ich habe versucht, eine Menge der Varianten der ALLOWED_HOSTS:
ALLOWED_HOSTS = ['localhost', 'my_site.com', 'ubuntu-virtualbox']
. localhost und ubuntu-virtualbox -> funktioniert, my_site.com -> Schlechte Anfrage, Dann habe ich versucht den Zugriff für alle hosts:ALLOWED_HOSTS = ['*']
mit dem gleichen Ergebnis. Und selbst wenn ich die geändert DEBUG auf True, werden nur localhost und ubuntu-virtualbox zur Verfügung standen. my_site.com ist immer noch zurückgeben Bad Request Kann es sein, weil der virtualenv oder einige system-Einstellungen?hier ist meine Frage stackoverflow.com/questions/25357744/django-and-bad-request-400 .Den ich geben kann, mehr info dort. Es ist zu schwer zu Postleitzahl in die Kommentare.
Nicht mit der Website aufgeführt in "ALLOWED_HOSTS" war auch mein Problem. Ich habe neu starten müssen Sie Apache nach der änderung ist es, obwohl. Ohne Neustart von Apache ging es weiter zur Anzeige der gelegentliche http 400-bad request.
InformationsquelleAutor teewuane
Wenn Sie habe definitiv
ALOWED_HOSTS
- stellen Sie sicher, dass Ihr hostname nicht enthalten Unterstriche. Es ist technisch illegal.Musste ich drucken Sie verschiedene Funktionen, und es eingekocht, um diese regex Versagen zu erkennen, dass eine domain in
django.http
Und in der Tat, meine domain hatte einen Unterstrich.
InformationsquelleAutor Yuji 'Tomita' Tomita
Dies ist keine Lösung, aber für debugging-Zwecke können Sie die ALLOWED_HOSTS Einstellung Ihrer settings.py wie diese
Sollte es auf jeden Fall funktionieren. Wenn nicht, zumindest werden Sie wissen, das problem ist nicht Django zu leugnen, Zugang zu der angegebenen url.
auch mit dieser Einstellung, ich habe schlechte Anfrage, beim umleiten auf einen anderen server..
Das ist gut für DEBUG-Gründen, um zu bestimmen, ob das problem mit ALOWED_HOSTS.
InformationsquelleAutor user3770635