我的简单Django应用程序在调试模式下工作正常(manage.py runserver
),并且在我的开发箱上的WSGI + Apache下工作,但当我推送到EC2时,我开始接收Bad Request (400)
任何URL的间歇性(10-80%的时间)错误我试图查看(无论是在我的应用程序中还是在Django管理员中.
我在哪里可以找到关于此的调试信息?没有任何东西出现/var/log/apache2/error.log
,即使有LogLevel=info
.我检查了版本,记录了Request环境(参见ModWSGI Debugging Tips),看不出有什么重大差异.
剩下的一个想法是,我正在使用Ubuntu 12.04(libapache2-mod-wsgi 3.3-4build1)的mod_wsgi,它是针对Python 2.7.1构建的; 我有Python 2.7.3.Django是1.6,比Ubuntu Precise版本更新.我不愿意从源代码开始构建软件包,因为它很难清理,这看起来像是次要的版本更改......
谢谢您的帮助.
(供参考,这里是Apache配置和WSGI应用程序)
ServerAdmin webmaster@localhost DocumentRoot /var/www WSGIScriptAlias /rz /usr/local/share/rz/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())
teewuane.. 106
将ALLOWED_HOSTS设置添加到您的settings.py中,如此...
ALLOWED_HOSTS = [ '.example.com', # Allow domain and subdomains '.example.com.', # Also allow FQDN and subdomains ]
我遇到了同样的问题,并在文档中找到了答案
更新:django 1.6文档不再在线,我更新了链接,转到django 1.7文档进行ALLOWED_HOSTS
设置.
如果您确实设置了ALOWED_HOSTS
- 请确保您的主机名不包含下划线.这在技术上是非法的.
我不得不打印出各种函数,然后归结为这个正则表达式无法检测到域 django.http
host_validation_re = re.compile(r"^([a-z0-9.-]+|\[[a-f0-9]*:[a-f0-9:]+\])(:\d+)?$")
事实上,我的域名中有一个下划线.
将ALLOWED_HOSTS设置添加到您的settings.py中,如此...
ALLOWED_HOSTS = [ '.example.com', # Allow domain and subdomains '.example.com.', # Also allow FQDN and subdomains ]
我遇到了同样的问题,并在文档中找到了答案
更新:django 1.6文档不再在线,我更新了链接,转到django 1.7文档进行ALLOWED_HOSTS
设置.