Nginx - Como redirecionar usuários com determinado IP para página especial

20

Eu corro uma grande galeria de imagens e há 5 visitantes que criam uma quantidade enorme de tráfego fazendo o download do site todo dia usando webcopiers. Esses visitantes têm IPs estáticos como parece. O que eu gostaria de alcançar é que esses 5 IPs sejam redirecionados para uma determinada página (o que explica por que seu comportamento é problemático) assim que eles visitam o site. Todos os outros visitantes devem poder navegar no site normalmente.

O servidor está executando o CentOS (5.8) e o nginx (1.0.15) como servidor web. Existe alguma maneira de conseguir isso por uma entrada no nginx.conf que você está ciente de?

Muito obrigado antecipadamente por suas dicas e apoio!

Atenciosamente -Alex

    
por Alex 18.04.2012 / 14:42

3 respostas

27

O módulo Geo é feito para corresponder aos endereços dos clientes. Você pode usá-lo para definir uma variável para testar assim:

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;
  }
}

Isso é mais eficiente do que executar um regex com $ remote_addr e mais fácil de manter.

    
por 18.04.2012 / 21:41
16

Usando o HttpAccessModule , você fará isso acontecer rapidamente.

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

Se você redirecionou para uma página diferente no mesmo domínio e seguiu os exemplos acima, isso causará um loop direto. Então, no seu arquivo de configuração nginx, use como segue (eu suponho que você use o wordpress como é amplamente utilizado)

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;
}

}

Agora, se alguém do ip da lista negra visitar qualquer página, exceto a página de aviso não listada no site, ela será redirecionada para a página de aviso. já que a reescrita está no local / bloco, não causará um loop de redirecionamento. No entanto, se estiver dentro do bloco do servidor, isso causará um loop de redirecionamento.

    
por 19.07.2017 / 16:38