Um Spam zu vermeiden, 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 weisen nginx an, die Verbindung nur 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 Domains definieren und dann etwa sagen: "Wenn sich der Referrer in dieser Liste befindet, dann geben Sie 444 zurück."
Antworten:
Ich würde versuchen ein
map
:Dann benutze es wie folgt:
quelle
hostnames
und möglicherweiseinclude
in einer separaten Datei, in der sie aufgelistet sind, um die Wartung zu vereinfachen.map
ich daran interessiert, ob man Regex verwenden kann, um bestimmte Referrer zuzuordnen, da OP den Regex-Abgleich mit dem~*
Operator durchführt, und in der Tat die einfache Angabe der Map-Regel, wie"~*spamdomain4.com" 1;
es der Trick ist. Ordentlich!hostnames
Option wäre es einfach.spamdomain4.com 1;
Sie könnten logisch verwenden
OR
, um eine Multi-Match-Anweisung zu erstellen, zBEARBEITEN per Kommentar; Entfernen
break;
aus dem Blockquelle
ngx_http_referer_module ist eine andere Möglichkeit, dies zu tun. Beispiel aus Referer Spam Blocking :
quelle