为了防止引用垃圾邮件,我的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; } }