Para evitar el spam de referencia, 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 indican a nginx solo que cierre la conexión si el usuario tiene configurado uno de estos referentes. ¿Hay alguna 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, devuelva 444"?
Respuestas:
Intentaría un
map
:Luego úsalo así:
fuente
hostnames
y posiblementeinclude
un archivo separado donde se enumeran, podría facilitar el mantenimiento.map
me interesó ver si uno podría usar expresiones regulares para hacer coincidir ciertos referentes ya que OP está haciendo coincidir expresiones regulares utilizando el~*
operador, y de hecho simplemente especificando la regla del mapa como"~*spamdomain4.com" 1;
hará el truco. ¡Ordenado!hostnames
opción sería simplemente.spamdomain4.com 1;
Podría usar lógico
OR
para elaborar una declaración de coincidencia múltiple, por ejemploEDITAR por comentario; quitando
break;
del bloquefuente
ngx_http_referer_module es otra forma de hacerlo. Ejemplo de Referer Spam Blocking :
fuente