我的简单的Django应用程序在调试模式(manage.py runserver
)下运行良好,并且在我的dev box上运行在WSGI+Apache下,但是当我推送到EC2时,我尝试查看的任何URL(无论是在我的应用程序中还是在Django admin中)都开始收到间歇性的Bad Request (400)
错误(10-80%的时间)。
我在哪里可以找到关于这个的调试信息?即使使用LogLevel=info
,/var/log/apache2/error.log
中也不会出现任何内容。我已经检查了版本,记录了请求环境(参见ModWSGI Debugging Tips),看不出有什么大的不同。
我剩下的一个想法是,我使用Ubuntu12.04(libapache2-mod-WSGI3.3-4build1)中的mod_wsgi,它是针对Python2.7.1构建的;我使用的是Python2.7.3。Django是1.6,比Ubuntu精确版本更新。我不太愿意从源代码开始构建包,因为它很难清理,而且这些似乎只是很小的版本更改……
感谢您的帮助。
(作为参考,这里是Apache配置和WSGI应用程序)
Apache配置(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())
发布于 2013-12-17 03:03:04
将ALLOWED_HOSTS设置添加到您的settings.py,如下所示...
ALLOWED_HOSTS = [
'.example.com', # Allow domain and subdomains
'.example.com.', # Also allow FQDN and subdomains
]
我也遇到了同样的问题,找到了答案here in the docs
更新: django 1.6文档不再在线,我更新了链接,转到django 1.7 docs for ALLOWED_HOSTS
设置。
发布于 2014-11-04 16:35:48
如果你确实设置了ALOWED_HOSTS
--确保你的主机名不包含下划线。严格来说这是非法的。
我不得不打印出各种函数,归结起来就是这个正则表达式无法在django.http
中检测域
host_validation_re = re.compile(r"^([a-z0-9.-]+|\[[a-f0-9]*:[a-f0-9:]+\])(:\d+)?$")
事实上,我的域名中有一个下划线。
发布于 2014-12-16 18:04:29
这不是解决方案,但出于调试目的,您可以在settings.py中设置ALLOWED_HOSTS设置,如下所示
ALLOWED_HOSTS = ['*']
这肯定能行得通。如果没有,至少你会知道问题不是Django拒绝访问给定的url。
https://stackoverflow.com/questions/20321673
复制相似问题