
為了防止引薦垃圾郵件,我的 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;
}
}