使用 Apache/NginX 部署时出现 Django Bad Request(400) 错误
Posted
技术标签:
【中文标题】使用 Apache/NginX 部署时出现 Django Bad Request(400) 错误【英文标题】:Django Bad Request(400) Error in Deployment with Apache/NginX 【发布时间】: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
【参考方案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
【讨论】:
以上是关于使用 Apache/NginX 部署时出现 Django Bad Request(400) 错误的主要内容,如果未能解决你的问题,请参考以下文章
AWS Elastic Beanstalk 使用 CLI 部署时出现 Botocore 错误
使用 elasticbeanstalk 部署 Flask 时出现 AWS mod_wsgi 错误
尝试使用 cloud build (gcp) 部署时出现 URL not found