
Um Referrer-Spam zu verhindern, enthält meine nginx.conf einen Abschnitt wie diesen:
if ($http_referer ~* spamdomain1\.com) {
return 444;
}
if ($http_referer ~* spamdomain2\.com) {
return 444;
}
if ($http_referer ~* spamdomain3\.com) {
return 444;
}
Diese Regeln sagen nginx, die Verbindung zu schließen, wenn der Benutzer einen dieser Referrer festgelegt hat. Gibt es eine elegantere Möglichkeit, dies zu tun? Kann ich eine Liste dieser Domänen definieren und dann etwas sagen wie: „Wenn der Referrer in dieser Liste ist, gib 444 zurück“?
Antwort1
Ich würde versuchen,map
:
map $http_referer $bad_referer {
default 0;
"~spamdomain1.com" 1;
"~spamdomain2.com" 1;
"~spamdomain3.com" 1;
}
Dann verwenden Sie es folgendermaßen:
if ($bad_referer) {
return 444;
}
Antwort2
Sie können logical verwenden OR
, um eine Multi-Match-Anweisung zu erstellen, z. B.
if ($http_referer ~ "spamdomain1\.com|spamdomain2\.com|spamdomain3\.com") {
return 444;
}
BEARBEITENpro Kommentar; Entfernen break;
aus dem Block
Antwort3
ngx_http_referer_moduleist eine andere Möglichkeit, dies zu tun. Beispiel ausReferrer-Spam-Blockierung:
location / {
valid_referers none blocked *.badreferer1.com badreferer2.com *.badreferer3.com badreferer4.net;
if ($invalid_referer) {
return 403;
}
}