有没有一种优雅的方法来一次阻止一群引用者?

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

if ($http_referer ~* spamdomain1\.com) { return 444; } if ($http_referer ~* spamdomain2\.com) { return 444; } if ($http_referer ~* spamdomain3\.com) { return 444; } 

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

我会尝试一个map

 map $http_referer $bad_referer { default 0; "~spamdomain1.com" 1; "~spamdomain2.com" 1; "~spamdomain3.com" 1; } 

然后像这样使用它:

 if ($bad_referer) { return 444; } 

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

 if ($http_referer ~ "spamdomain1\.com|spamdomain2\.com|spamdomain3\.com") { return 444; } 

编辑每个评论; 消除break; 来自街区

ngx_http_referer_module是另一种方法。 来自Referer垃圾邮件拦截的示例:

 location / { valid_referers none blocked *.badreferer1.com badreferer2.com *.badreferer3.com badreferer4.net; if ($invalid_referer) { return 403; } }