我经营着一个相当大的图片库,有 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 的某人访问了除警告页面之外的任何页面(该页面未在站点中列出),他们将被重定向到警告页面。由于重写位于位置 / 块中,因此不会导致重定向循环。但是,如果它在服务器块内,则会导致重定向循环。