【问题标题】:Django Bad Request(400) Error in Deployment with Apache/NginX使用 Apache/NginX 部署时出现 Django Bad Request(400) 错误
【发布时间】:2014-03-20 13:25:51
【问题描述】:

我正在尝试以Debug=False 模式在 VPS 上午餐我的应用程序。 Debug=True 工作正常,但是当我将其更改为 false 时出现此错误。我使用 Apache 来渲染 python 页面和 Nginx 来提供我的静态文件。我尝试使用这个[答案]:Debugging Apache/Django/WSGI Bad Request (400) Error,但至少对我不起作用。这是我的 wsgi 配置:

#wsgi.py
import os
import sys

os.environ['DJANGO_SETTINGS_MODULE'] = 'example.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
path = '/var/www/example'
if path not in sys.path:
    sys.path.append(path)

我还在我的设置文件中添加了以下代码:

ALLOWED_HOSTS = [
    '.example.com', # Allow domain and subdomains
    '.example.com.', # Also allow FQDN and subdomains
]

【问题讨论】:

  • 你用你的真实域名替换example.com?您是否也收到此ALLOWED_HOSTS = '*' 的 404 错误?您的模板文件夹的根目录中有404.html 模板文件吗?
  • @OmidRaha 谢谢我更改了ALLOWED_HOSTS = '*' 并解决了问题。你能解释一下为什么我的域名不行吗?是的,我将 example.com 更改为我的真实域名。
  • * 不好,通过添加域来修复它,查看ALLOWED_HOSTS
  • 不,两者都不起作用。但是* 的问题是什么?
  • * 具有安全性issue,首先将* 设置为ALLOWED_HOSTS,然后在某处查看打印并查看print(request.META['HTTP_HOST'])print(request.get_host()) 的输出,然后设置该输出(只是它作为列表的域)到您的ALLOWED_HOSTS

标签: python django apache python-2.7 nginx


【解决方案1】:

要发现你的问题,首先在settings.py设置ALLOWED_HOSTS暂时为:

ALLOWED_HOSTS = '*'

然后在您的view 中的某个位置,尝试打印并查看此命令的输出:

print(request.META['HTTP_HOST']) # or print(request.get_host())

然后根据输出,将它(只是它的域作为列表)设置为您的ALLOWED_HOSTS

注意事项:

  • 使用ALLOWED_HOSTS = '*' 可能会给您带来安全问题,请阅读 关于那个here

  • 每次更改后,您都需要重新启动服务(apache/nginx)。

【讨论】:

    【解决方案2】:

    我的西里尔域名也遇到了同样的问题。

    我已将我的域的 punicode 表示添加到 ALLOWED_HOSTS,这解决了问题。

    也许这应该作为一个错误发送给 Django,但我没有深入研究(这可能是我的托管配置的问题),只是 ab(当然还有浏览器)。这个问题对我来说也是间歇性的(通常比下面用 ab 显示的更糟糕)。

    没有 punicode

    完成请求:20 失败的请求:3

    使用 punicode 时

    完成请求:20 失败的请求:0

    【讨论】:

      猜你喜欢
      • 2011-05-31
      • 1970-01-01
      • 2015-11-16
      • 2019-09-26
      • 1970-01-01
      • 2023-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多