Nginx - 如何将特定 IP 的用户重定向到特殊页面

Nginx - 如何将特定 IP 的用户重定向到特殊页面

我经营着一个相当大的图片库,有 5 位访问者每天使用网络复制器下载整个网站,产生了巨大的流量。这些访问者似乎拥有静态 IP。我希望实现的是,这 5 个 IP 在访问网站后立即重定向到某个页面(这解释了为什么他们的行为有问题)。所有其他访问者都应该能够正常浏览该网站。

该服务器运行 CentOS (5.8) 和 nginx (1.0.15) 作为 Web 服务器。您是否知道有什么方法可以通过 nginx.conf 中的条目来实现这一点?

非常感谢您的提示和支持!

亲切的问候 -Alex

答案1

地理模块用于匹配客户端地址。您可以使用它来定义要测试的变量,如下所示:

geo $bad_user {
  default 0;
  1.2.3.4/32 1;
  4.3.2.1/32 1;
}

server {
  if ($bad_user) {
    rewrite ^ http://www.example.com/noscrape.html;
  }
}

这比针对 $remote_addr 运行正则表达式更有效,并且更易于维护。

答案2

使用HttpAccess模块你会很快让这件事发生。

server {
    if ($remote_addr = 1.2.3.4) {
        rewrite ^ http://www.website.com/noscrape.htm;
    }
   ...
}

答案3

如果您重定向到同一域中的其他页面,并且按照上述示例操作,则会导致重定向循环。因此,在您的 nginx 配置文件中,使用以下命令(我假设您使用 wordpress,因为它被广泛使用)

geo $bad_user {
  default 0;
  1.2.3.4/32 1;
  4.3.2.1/32 1;
}

server {
 location /
 {
  if ($bad_user) {
    rewrite ^ http://www.example.com/warning-page/ break;
  }

try_files $uri $uri/ /index.php$is_args$args;
 }

location /warning-page/
{
try_files $uri $uri/ /index.php$is_args$args;
}
  
}

现在,如果来自黑名单 IP 的某人访问了除警告页面之外的任何页面(该页面未在站点中列出),他们将被重定向到警告页面。由于重写位于位置 / 块中,因此不会导致重定向循环。但是,如果它在服务器块内,则会导致重定向循环。

相关内容