У меня довольно большая галерея изображений, и пять посетителей создают огромный трафик, загружая весь сайт каждый день с помощью веб-копиров. Кажется, у этих посетителей статические IP-адреса. Я хотел бы добиться, чтобы эти 5 IP-адресов перенаправлялись на определенную страницу (что объясняет, почему их поведение проблематично), как только они посещают сайт. Все остальные посетители должны иметь возможность просматривать сайт в обычном режиме.
Сервер работает под управлением CentOS (5.8) и nginx (1.0.15) в качестве веб-сервера. Есть ли способ добиться этого с помощью записи в nginx.conf, о которой вы знаете?
Заранее большое спасибо за ваши советы и поддержку!
С уважением - Алексей
В Гео модуль сделан под адреса клиентов. Вы можете использовать его для определения переменной для тестирования следующим образом:
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;
}
...
}
Если вы перенаправили на другую страницу в том же домене, и если вы следовали приведенным выше примерам, это вызовет цикл перенаправления. поэтому в вашем файле конфигурации 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-адресов из черного списка посетил любую страницу, кроме страницы с предупреждением, которая не указана на сайте, он будет перенаправлен на страницу с предупреждением. поскольку перезапись находится в местоположении / блоке, это не вызовет цикла перенаправления. Однако, если он находится внутри серверного блока, это вызовет цикл перенаправления.