gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 05:55:43 25 4
gpt4 key购买 nike

我经常在 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:无效的 HTTP_HOST header (您可能需要设置 ALLOWED_HOSTS):someotherdomainname.tld

但是我每天通过标准的 django 错误记录器收到 4 或 5 个这样的错误。 someotherdomain.tld 可以是 *.example.com(我的服务器的通配符)、服务器的 IP 地址或随机的东西,例如 device-metrics-us-2.amazon.com:443 或data.flurry.com 仅举几例。更令人困惑的是,我可以转到服务器 IP 地址或其他任何内容。example.com,我得到了没有错误电子邮件的 nginx 404 屏幕(预期行为)。

我相当确定这是由于以下事实造成的:如果您在公司登录我们的公共(public) wifi,该网站是为您提供的,您必须以访客身份登录,然后它会将您重定向到我们的网站(这很烦人,但 CEO坚持...)。这些错误是无害的,没有人报告说在尝试访问 amazon.com 或类似网站时看到了 django 错误页面。我只是对如何考虑我的 nginx 配置感到困惑。

最佳答案

假设您已经正确配置了 django (ALLOWED_HOSTS);那么可能有人只是在欺骗标题。主机欺骗是检查漏洞的常用策略。

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

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

关于python - django/nginx 中无法解释的无效 HTTP_HOST 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27914823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com