有沒有一種優雅的方法可以同時阻止一堆引薦來源網址?

有沒有一種優雅的方法可以同時阻止一堆引薦來源網址?

為了防止引薦垃圾郵件,我的 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來製作一個多重匹配語句,例如

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;
  }
}

相關內容