nginx log quando o referenciador específico estiver presente

1

Como alguém rouba conteúdo do nosso site, eu preciso criar um arquivo de log adicional, que registra somente se http_referrer contiver um domínio específico.

Atualmente, tenho isto:

   if ($http_referer ~* (bad-domain.com)){
           return  500;
   }

Mas, em vez de retornar 500, preciso retornar a resposta normal, mas registrar a solicitação.

    
por Nick 23.04.2015 / 07:59

3 respostas

3

A diretiva access_log é válida dentro de if , então você pode simplesmente adicionar uma lá.

No entanto, , a sua presença substitui qualquer um que apareça acima na hierarquia, por isso, se adicionar uma entrada, a solicitação não ser logado em qualquer log de acesso que você normalmente registra para aquele servidor.

Para contornar isso, você pode usar duas access_log diretivas dentro de if , uma que repete o log de acesso normal e uma para seu log de acesso especial (que também pode usar um log_format diferente, se desejar).

    
por 23.04.2015 / 08:13
1

Basta colocar access_log dentro de se não funcionar

No entanto, access_log somente dentro de se estiver dentro de local e a partir desse segmento, podemos ver a solução alternativa:

Arquivo de log de acesso do Nginx separado somente para determinadas solicitações

if ($http_referer ~* (bad-domain.com)){
  set $bad_domain 'yes';
}

location / {
  if ($bad_domain = 'yes') {
    access_log logs/bad_domain.log;
    return 200;
    }

    ...
}
    
por 23.04.2015 / 10:44
0

Use a map diretiva como esta

map $http_referer $loggable_referer {
    default           0;
    ~*bad-domain.com  1;
}
access_log /var/log/nginx/bad_domain.log combined if=$loggable_referer;
    
por 28.01.2018 / 21:50