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 definidos. 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”?
Respostas:
Eu tentaria um
map
:Em seguida, use-o assim:
fonte
hostnames
e possiblelyinclude
de um arquivo separado onde são listados poderia torná-lo mais fácil de manter.map
eu estava interessado em ver se alguém poderia usar regex para corresponder a determinados referenciadores, já que o OP está fazendo a correspondência de regex usando o~*
operador e, de fato, simplesmente especificar a regra do mapa como"~*spamdomain4.com" 1;
fará o truque. Arrumado!hostnames
opção seria simplesmente.spamdomain4.com 1;
Você pode usar lógico
OR
para criar uma declaração de correspondência múltipla, por exemploEDIT por comentário; removendo
break;
do blocofonte
ngx_http_referer_module é outra maneira de fazer isso. Exemplo do bloqueio de spam de referência :
fonte