
Para evitar spam de referência, meu nginx.conf contém uma seção como esta:
if ($http_referer ~* spamdomain1\.com) {
return 444;
}
if ($http_referer ~* spamdomain2\.com) {
return 444;
}
if ($http_referer ~* spamdomain3\.com) {
return 444;
}
Essas regras dizem ao nginx apenas para fechar a conexão se o usuário tiver um desses referenciadores configurado. Existe uma maneira mais elegante de fazer isso? Posso definir uma lista desses domínios e dizer algo como “Se o referenciador estiver nesta lista, retorne 444”?
Responder1
eu tentaria ummap
:
map $http_referer $bad_referer {
default 0;
"~spamdomain1.com" 1;
"~spamdomain2.com" 1;
"~spamdomain3.com" 1;
}
Então use assim:
if ($bad_referer) {
return 444;
}
Responder2
Você poderia usar lógica OR
para criar uma instrução multicorrespondência, por exemplo
if ($http_referer ~ "spamdomain1\.com|spamdomain2\.com|spamdomain3\.com") {
return 444;
}
EDITARpor comentário; removendo break;
do bloco
Responder3
ngx_http_referer_moduleé outra maneira de fazer isso. Exemplo deBloqueio de spam de referência:
location / {
valid_referers none blocked *.badreferer1.com badreferer2.com *.badreferer3.com badreferer4.net;
if ($invalid_referer) {
return 403;
}
}