有没有一种优雅的方法可以一次阻止一堆推荐人?

bde*_*ham 23 nginx

为了防止引用垃圾邮件,我的 nginx.conf 包含这样的部分:

if ($http_referer ~* spamdomain1\.com) {
    return 444;
}
if ($http_referer ~* spamdomain2\.com) {
    return 444;
}
if ($http_referer ~* spamdomain3\.com) {
    return 444;
}
Run Code Online (Sandbox Code Playgroud)

如果用户设置了这些引用之一,这些规则告诉 nginx 只是关闭连接。有没有更优雅的方法来做到这一点?我可以定义这些域的列表,然后说“如果引用者在此列表中,则返回 444”吗?

Mic*_*ton 33

我会尝试一个map

map $http_referer $bad_referer {
    default                  0;
    "~spamdomain1.com"       1;
    "~spamdomain2.com"       1;
    "~spamdomain3.com"       1;
}
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它:

if ($bad_referer) {
    return 444;
}
Run Code Online (Sandbox Code Playgroud)

  • @Brian 引用字段是一个完整的 URL,而不仅仅是一个主机名。所以这是行不通的。 (5认同)

Hrv*_*jar 14

您可以使用逻辑OR来制作一个多匹配语句,例如

if ($http_referer ~ "spamdomain1\.com|spamdomain2\.com|spamdomain3\.com")  { 
  return 444;
}
Run Code Online (Sandbox Code Playgroud)

编辑每个评论;break;从块中移除

  • 由于 return 停止处理当前请求,因此永远不会到达 break 指令。 (2认同)