
Para evitar el spam de referencias, mi nginx.conf contiene una sección como esta:
if ($http_referer ~* spamdomain1\.com) {
return 444;
}
if ($http_referer ~* spamdomain2\.com) {
return 444;
}
if ($http_referer ~* spamdomain3\.com) {
return 444;
}
Estas reglas le dicen a nginx que simplemente cierre la conexión si el usuario tiene configurada una de estas referencias. ¿Existe una forma más elegante de hacer esto? ¿Puedo definir una lista de estos dominios y luego decir algo como "Si el referente está en esta lista, entonces devuelve 444"?
Respuesta1
probaría unmap
:
map $http_referer $bad_referer {
default 0;
"~spamdomain1.com" 1;
"~spamdomain2.com" 1;
"~spamdomain3.com" 1;
}
Entonces úsalo así:
if ($bad_referer) {
return 444;
}
Respuesta2
Podría utilizar la lógica OR
para elaborar una declaración de coincidencias múltiples, por ejemplo
if ($http_referer ~ "spamdomain1\.com|spamdomain2\.com|spamdomain3\.com") {
return 444;
}
EDITARpor comentario; quitando break;
del bloque
Respuesta3
ngx_http_referer_modulees otra forma de hacerlo. Ejemplo deBloqueo de spam de referencia:
location / {
valid_referers none blocked *.badreferer1.com badreferer2.com *.badreferer3.com badreferer4.net;
if ($invalid_referer) {
return 403;
}
}