如何阻止设置了错误 Host 标头的请求?

如何阻止设置了错误 Host 标头的请求?

我使用 nginx 来服务我的网站。我想阻止所有带有与我的网站域名不匹配的 HTTP“Host”标头的请求。

更具体地说,我的 nginx.conf 包含这两个服务器块:

server {
    # Redirect from the old domain to the new domain; also redirect
    # from www.newdomain.com to newdomain.com without the "www"
    server_name www.olddomain.com olddomain.com www.newdomain.com;
    listen 80;
    return 301 $scheme://newdomain.com$request_uri;
}

server {
    server_name newdomain.com localhost;
    listen 80;

    # Actual configuration goes here...
}

我想阻止(即“返回” 444 状态代码)主机不是 www.olddomain.com、olddomain.com、www.newdomain.com 或 newdomain.com 的任何流量。我该怎么做?

答案1

定义默认服务器

如果你没有明确定义默认服务器,nginx 将隐式使用第一个找到的服务器.因此,只需创建用于阻止未知主机的服务器块

server {
  listen 80 default_server;
  return 444;
}

(不,没有必要添加 server_name - 因为它永远不会匹配)。

答案2

有趣的是,我有时会将“-”用作主机标头,而@AD7Six 的答案似乎没有捕捉到这一点 (?)。至少在我的情况下,它不起作用。

所以我修改了此引荐垃圾邮件博客文章条目只需一点点,它就会像魔法一样起作用:

if ($http_host ^~ (myhostpattern.com) {
    return 405;
}

不知道这是否是最好的解决方案,但它不断地从我的网站上抓取机器人。

相关内容