小编典典

调试Apache / Django / WSGI错误请求(400)错误

python

我简单的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
),没有发现主要差异。

我剩下的一个想法是,我正在使用针对Python 2.7.1构建的Ubuntu 12.04的mod_wsgi(libapache2-mod-wsgi
3.3-4build1);我有Python 2.7.3。Django是1.6,比Ubuntu
Precise版本更新。我犹豫要从源代码开始构建软件包,因为清理起来非常困难,而且这些更改似乎是次要的版本更改…

感谢您的帮助。

(作为参考,这是Apache config和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())

阅读 209

收藏
2020-12-20

共1个答案

小编典典

像这样将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设置。

2020-12-20