Afin d'éviter le spam référent, mon nginx.conf contient une section comme celle-ci:
if ($http_referer ~* spamdomain1\.com) {
return 444;
}
if ($http_referer ~* spamdomain2\.com) {
return 444;
}
if ($http_referer ~* spamdomain3\.com) {
return 444;
}
Ces règles indiquent à nginx de fermer la connexion uniquement si l'utilisateur a défini l'un de ces référents. Existe-t-il une manière plus élégante de procéder? Puis-je définir une liste de ces domaines et dire ensuite quelque chose comme: «Si le référent est dans cette liste, retournez 444»?
Réponses:
J'essaierais un
map
:Ensuite, utilisez-le comme ceci:
la source
hostnames
et éventuellementinclude
un fichier séparé où elles sont répertoriées pourraient faciliter la maintenance.map
J'étais intéressé de voir si on pouvait utiliser regex pour correspondre à certains référents puisque OP fait une correspondance regex en utilisant l'~*
opérateur, et en effet simplement spécifier une règle de carte comme"~*spamdomain4.com" 1;
fera l'affaire. Soigné!hostnames
option, ce serait simplement.spamdomain4.com 1;
Vous pouvez utiliser logique
OR
pour créer une déclaration de correspondance multiple, par exempleEDIT par commentaire; retrait
break;
du blocla source
ngx_http_referer_module est une autre façon de le faire. Exemple de blocage du spam référent :
la source