django / nginx中无法解释的无效HTTP_HOST错误

时间:2015-01-13 04:19:55

标签: python django nginx

我经常在django中看到非常奇怪的INVALID_HOST错误。网站域名(从现在开始称为example.com)是nginx传递给django的唯一内容。 example.com位于django.conf.settings.ALLOWED_HOSTS。其他一切都直接进入nginx的404.这是我配置中的相关行:

server { return 404; }
upstream django {
  server 127.0.0.1:3033;
}

server {
  listen      80;
  server_name classes.example.com;
  return 302 https://example.com/classes/;
}

server {
  listen      80;
  server_name *.example.com example.com;
  return 302 https://example.com$request_uri;
}

server {
  if ($host ~* "^classes.example.com$") {
    rewrite ^.*(?=\/)(.+)$ https://example.com/classes/ permanent;
    break;
  }

  listen   443;
  root /home/django/example.com;
  server_name *.example.com example.com;

  # here are static files/ irrelevant code

  location / {
    uwsgi_pass django;
    include uwsgi_params;
  }
}

对我而言,我说永远不会看到以下邮件通过电子邮件发送给我。

SuspiciousOperation: Invalid HTTP_HOST header (you may need to set ALLOWED_HOSTS): someotherdomainname.tld

但是我通过标准的django错误记录器每天收到4或5个。 someotherdomain.tld可以是* .example.com(我的服务器的通配符),服务器的IP地址,或随机的东西,如device-metrics-us-2.amazon.com:443或data.flurry.com仅举几例。为了使问题更加混乱,我可以转到服务器IP地址或whatever.example.com,我得到nginx 404屏幕,没有错误电子邮件(预期的行为)。

我相当肯定这是因为如果你登录公司的公共wifi,那么你必须以访客的身份登录,然后将你重定向到我们的网站(烦人但是CEO)坚持...)。这些错误是无害的,当他们试图访问amazon.com或类似的东西时,没有人报告过看到django错误页面。考虑到我的nginx配置,我只是觉得它是如何可能的。

1 个答案:

答案 0 :(得分:1)

假设您已正确配置django(ALLOWED_HOSTS);然后它可能是某人只是欺骗标题。主机欺骗是检查漏洞的常用策略。

您可以通过拒绝服务器负责的任何内容来完全阻止这些:

if ($host !~* ^(example.com|classes.example.com|www.example.com)$) {
        return 444;
}