Answers:
该地理模块由相匹配的客户端地址。您可以使用它来定义一个变量进行测试,如下所示:
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运行正则表达式更有效,并且更易于维护。
使用HttpAccessModule,您可以快速完成此操作。
server {
if ($remote_addr = 1.2.3.4) {
rewrite ^ http://www.website.com/noscrape.htm;
}
...
}
if ($remote_addr ~ "^(1.2.3.4|4.3.2.1)$")
。
nginx -V
说没有这样的模块,但是可以工作。也许现在是内置的。
如果您重定向到同一域中的其他页面,并且遵循上述示例,则将导致直接循环。因此,在您的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 $fullurl${request_uri}index.html $uri $uri/ /index.php$is_args$args;
}
location /warning-page/
{
try_files $fullurl${request_uri}index.html $uri $uri/ /index.php$is_args$args;
}
}
现在,如果列入黑名单的IP中的某人访问了除该站点中未列出的警告页面之外的任何页面,他们将被重定向到警告页面。由于重写位于位置/块中,因此不会导致重定向循环。但是,如果它在服务器块内部,则将导致重定向循环。