我运行了一个相当大的图片库,有5个访问者通过每天下载整个网站使用networking复制器创build大量的stream量。 这些访问者似乎具有静态IP。 我想实现的是,一旦他们访问该网站,这5个IP就会被redirect到某个页面(这就解释了为什么他们的行为是有问题的)。 所有其他访问者应该能够正常浏览该网站。
服务器运行CentOS(5.8)和nginx(1.0.15)作为web服务器。 有什么办法可以通过你知道的nginx.conf中的条目来实现吗?
非常感谢您的提示和支持!
亲切的问候 – 亚历克斯
Geo模块用于匹配客户端地址。 你可以用它来定义一个variables来testing,像这样:
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; } }
这比运行一个正则expression式对$ remote_addr更有效,而且更容易维护。
使用HttpAccessModule你会快速的做到这一点。
server { if ($remote_addr = 1.2.3.4) { rewrite ^ http://www.website.com/noscrape.htm; } ... }
如果您redirect到同一个域中的其他页面,并且如果您遵循上述示例,则会导致直接循环。 所以在你的nginxconfiguration文件中,使用如下(我假设你使用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; } }
现在,如果黑名单中的某个用户访问了网站中未列出的警告页面以外的任何页面,则会将其redirect到警告页面。 因为重写是在位置/块中,所以不会导致redirect循环。 但是,如果它在服务器块内部,则会导致redirect循环。