debuggingApache / Django / WSGI错误请求(400)错误

我的简单的Django应用程序在debugging模式( manage.py runserver )下工作正常,并且在我的开发箱上工作在WSGI + Apache下,但是当我推到EC2时,我开始接收错误Bad Request (400) (10-80%的时间) Bad Request (400)我试图查看任何url(无论是在我的应用程序或在Djangopipe理员。

我在哪里可以find有关此debugging信息? 即使使用LogLevel=info ,也不会出现在/var/log/apache2/error.log 。 我已经检查了版本,logging了请求环境(参见ModWSGIdebugging提示 )并且没有看到重大区别。

剩下的一个想法是,我使用的是基于Python 2.7.1构build的Ubuntu 12.04(libapache2-mod-wsgi 3.3-4build1)中的mod_wsgi; 我有Python 2.7.3。 Django是1.6,比Ubuntu Precise版本更新。 我犹豫从源码开始构build软件包,因为它很难清理,而且这些看起来像是小版本的变化…

感谢您的帮助。

(作为参考,这里是Apacheconfiguration和WSGI应用程序)

Apacheconfiguration(000-默认)

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

rz.WSGI应用程序

 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()) 

添加ALLOWED_HOSTS设置到你的settings.py像这样…

 ALLOWED_HOSTS = [ '.example.com', # Allow domain and subdomains '.example.com.', # Also allow FQDN and subdomains ] 

我遇到了同样的问题,并在文档中find了答案

更新:django 1.6文档不再在线,我更新了链接去django 1.7文档ALLOWED_HOSTS设置。

如果你确定设置ALOWED_HOSTS – 确保你的主机名不包含下划线。 这在技术上是非法的。

我不得不打印出各种function,并把它归结为这个正则expression式无法在django.http检测到一个域

 host_validation_re = re.compile(r"^([a-z0-9.-]+|\[[a-f0-9]*:[a-f0-9:]+\])(:\d+)?$") 

事实上,我的领域里有一个下划线。

不是一个解决scheme ,但为了debugging的目的,你可以像这样在settings.py中设置ALLOWED_HOSTS设置

 ALLOWED_HOSTS = ['*'] 

它应该肯定工作。 如果没有,至less你会知道问题不是Django拒绝访问给定的url。