【问题标题】:Avoiding Django's 500 error for not allowed host with Nginx避免使用 Nginx 的不允许主机的 Django 500 错误
【发布时间】:2013-06-13 12:28:46
【问题描述】:

我在生产网站中使用 Django 1.5.1,但由于不允许的主机请求,我有大量 500 的报告。我网站的Nginx vhost配置如下:

server {
    listen 80;
    server_name mywebsite.com.br;

    location / {
        uwsgi_pass unix:/opt/project/run/brmed_web.sock;
        include uwsgi_params;
    }
}

我已将settings.py 上的允许主机设置设置为:

ALLOWED_HOSTS = ['mywebsite.com.br']

即使它使用我允许的主机完美运行,对于陌生主机,我仍然收到如下错误:

Traceback (most recent call last):

  File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 92, in get_response
    response = middleware_method(request)

  File "/usr/local/lib/python2.7/dist-packages/django/middleware/common.py", line 57, in process_request
    host = request.get_host()

  File "/usr/local/lib/python2.7/dist-packages/django/http/request.py", line 72, in get_host
    "Invalid HTTP_HOST header (you may need to set ALLOWED_HOSTS): %s" % host)

SuspiciousOperation: Invalid HTTP_HOST header (you may need to set ALLOWED_HOSTS): 108.166.113.25

一些主机,如果不是全部的话,显然是恶意的,因为他们的请求试图欺骗一些 PHP 东西。有关其中一位主机的更多详细信息,请参阅this link

我的问题是,我在允许这些奇怪主机的这些请求通过的 Nginx 配置中缺少什么?仅供参考,我的 Nginx 只有这个配置文件和它的默认配置文件。

【问题讨论】:

标签: django nginx


【解决方案1】:

这取决于你的默认配置,但是从this answer on ServerFault你必须在Nginx中定义一个默认的vhost,否则它会使用第一个作为默认值。

基本上,您的配置应如下所示,以便仅允许对“mywebsite.com.br”的请求通过:

server {
    listen 80 default_server;
    location / {
        # or show another site
        return 403 "Forbidden";
    }
}

server {
    listen 80;
    server_name mywebsite.com.br;
    location / {
        uwsgi_pass unix:/opt/project/run/brmed_web.sock;
        include uwsgi_params;
    }
}

如果您还需要提供其他子域(www.mywebsite.com.br 等),您可以将 server_name 设置为“.mywebsite.com.br”。

【讨论】:

  • 嗨!它工作得很好!我不知道 Nginx 在与正确的服务器名称不匹配时会执行此过程。
  • 我必须添加一个 ;在“禁止”之后。此外,如果您还需要提供其他子域(www.mywebsite.com.br 等),您可以将 server_name 设置为“.mywebsite.com.br”
  • 仅供参考 - 自 0.8.21 版本以来,nginx 已将参数名称从“default”更改为“default_server”。
猜你喜欢
  • 2021-02-18
  • 1970-01-01
  • 2023-03-18
  • 2014-01-26
  • 2017-11-05
  • 1970-01-01
  • 1970-01-01
  • 2013-05-04
  • 2019-03-16
相关资源
最近更新 更多