一度に多数のリファラーをブロックする優れた方法はありますか?

一度に多数のリファラーをブロックする優れた方法はありますか?

リファラー スパムを防ぐために、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;
  }
}

関連情報