nginx
Bloquer les robots indésirables par User-Agent avec map
Fiche écrite en 2019, pour les navigateurs et les versions de l’époque. Vérifiez qu’elle correspond encore à votre environnement avant de l’appliquer.
Sur une boutique, une part étonnante des requêtes vient de robots qui n’apportent rien : aspirateurs de contenu, outils d’analyse de liens, scripts qui testent des failles connues. Avant de bloquer quoi que ce soit, on regarde qui passe vraiment. Dans le format de journal par défaut de nginx, le User-Agent est le sixième champ quand on découpe sur les guillemets :
awk -F'"' '{print $6}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -30
La directive map est évaluée une fois par requête et ne coûte presque rien, même avec une longue liste. Le code 444 est propre à nginx : il ferme la connexion sans rien répondre, ce qui ne donne aucune information au robot. Deux précautions : ne jamais mettre dans la liste Googlebot, Bingbot ni les robots de vos outils de surveillance, et relire la liste de temps en temps, car les robots changent de nom. Certains outils de référencement (Ahrefs, Semrush) sont légitimes : les bloquer est un choix, pas une évidence.
# /etc/nginx/conf.d/robots.conf (contexte http)
map $http_user_agent $robot_indesirable {
default 0;
"" 1; # aucun User-Agent
~*(MJ12bot|DotBot|BLEXBot|MegaIndex|SeznamBot) 1;
~*(python-requests|Go-http-client|libwww-perl) 1;
}
# Dans le bloc server du site
if ($robot_indesirable) {
return 444;
}
Sources
- nginx, module map nginx.org