web-dev-qa-db-fra.com

Nginx - Comment rediriger des utilisateurs avec une certaine IP vers une page spéciale

Je gère une assez grande galerie d'images et il y a 5 visiteurs qui créent une énorme quantité de trafic en téléchargeant le site entier tous les jours à l'aide de copieurs Web. Ces visiteurs ont des adresses IP statiques comme il semble. Ce que j'aimerais réaliser, c'est que ces 5 adresses IP soient redirigées vers une certaine page (ce qui explique pourquoi leur comportement est problématique) dès qu'elles visitent le site. Tous les autres visiteurs devraient pouvoir naviguer normalement sur le site.

Le serveur exécute CentOS (5.8) et nginx (1.0.15) en tant que serveur Web. Existe-t-il un moyen d'y parvenir par une entrée dans nginx.conf que vous connaissez?

Merci d'avance pour vos conseils et votre soutien!

Cordialement -Alex

27
Alex

Le module Geo est conçu pour faire correspondre les adresses des clients. Vous pouvez l'utiliser pour définir une variable à tester comme ceci:

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

C'est plus efficace que d'exécuter une expression régulière contre $ remote_addr, et plus facile à maintenir.

35
kolbyjack

En utilisant HttpAccessModule vous y arriverez rapidement.

server {
    if ($remote_addr = 1.2.3.4) {
        rewrite ^ http://www.website.com/noscrape.htm;
    }
   ...
}
20
user74078

Si vous avez redirigé vers une page différente dans le même domaine, et si vous avez suivi les exemples ci-dessus, cela provoquera une boucle directe. donc dans votre fichier de configuration nginx, utilisez comme suit (je suppose que vous utilisez wordpress car il est largement utilisé)

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

}

Maintenant, si quelqu'un de l'ip sur liste noire a visité une page à l'exception de la page d'avertissement qui n'est pas répertoriée dans le site, il sera redirigé vers la page d'avertissement. puisque la réécriture est dans l'emplacement/le bloc, elle ne provoquera pas de boucle de redirection. Cependant, s'il se trouve à l'intérieur du bloc serveur, cela provoquera une boucle de redirection.

2
Don Dilanga