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。