调试Apache / Django / WSGI错误请求(400)错误如何解决?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (223)

我的简单Django应用程序在调试模式(manage.py runserver)下运行良好,并且在我的开发箱中工作在WSGI + Apache下,但是当我推到EC2时,我开始接收Bad Request (400)任何网址的间歇性错误(10-80%的时间)查看(无论是在我的应用程序还是在Django管理员中。

我在哪里可以找到关于此的调试信息?没有任何内容出现/var/log/apache2/error.log,即使是LogLevel=info。我已经检查过版本,记录了请求环境(参见ModWSGI调试提示)并且没有发现重大差异。

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

(供参考,这里是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())
提问于
用户回答回答于

将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+)?$")

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励