
リファラー スパムを防ぐために、nginx.conf には次のようなセクションが含まれています。
if ($http_referer ~* spamdomain1\.com) {
return 444;
}
if ($http_referer ~* spamdomain2\.com) {
return 444;
}
if ($http_referer ~* spamdomain3\.com) {
return 444;
}
これらのルールは、ユーザーがこれらのリファラーのいずれかを設定している場合、nginx に接続を閉じるように指示します。これを行うよりエレガントな方法はありますか? これらのドメインのリストを定義して、「リファラーがこのリストにある場合は 444 を返す」などと言うことはできますか?
答え1
私は試してみたいmap
:
map $http_referer $bad_referer {
default 0;
"~spamdomain1.com" 1;
"~spamdomain2.com" 1;
"~spamdomain3.com" 1;
}
次のように使用します:
if ($bad_referer) {
return 444;
}
答え2
論理を使用しOR
て、1つのマルチマッチステートメントを作成できます。例:
if ($http_referer ~ "spamdomain1\.com|spamdomain2\.com|spamdomain3\.com") {
return 444;
}
編集コメントごと;break;
ブロックから削除
答え3
ngx_http_referer_モジュールもう一つの方法です。例リファラースパムブロック:
location / {
valid_referers none blocked *.badreferer1.com badreferer2.com *.badreferer3.com badreferer4.net;
if ($invalid_referer) {
return 403;
}
}