Nginx, registre os referenciadores de determinado domínio para separar o arquivo de log

3

Eu tenho minha configuração nginx para bloquear certos referencias assim:

if ($http_referer ~* (site_name) ) {
  return 403;
}

Isso funciona bem, no entanto, gostaria de também registrar o referenciador bloqueado em um arquivo separado.

Eu tentei adicionar

 access_log /path/to/server/bad_domain.log;

na declaração if; no entanto isso não funciona.

Alguma idéia?

Obrigado.

Editar:

Eu também tentei isso sem sucesso.

if ($http_referer ~* (site_name) ) {
  set $crawler 'yes';
  return 403;


}

location ~ .* {
  if ($crawler = 'yes') {
  access_log /path/to/server/bad_domain.log;
    }
}

Editar 2:

Tentando

map $http_referer $log_referer {
  domain1.com  1;
  default      0;
}

server { ..
    if ($http_referer = "1") {
    set $log_referer 1;
}
   access_log /path/to/logs/bad_domain.log if=$log_referer;

...}

me dá a saída de

nginx: [emerg] unknown log format "if=$log_referer"
    
por Jone Does 26.08.2015 / 20:14

3 respostas

1

De acordo com a documentação do nginx encontrada aqui e aqui , tente usar a regra do mapa para mapear o seu referenciador http para um determinado valor e, em seguida, registre-se no arquivo específico de acordo com esse valor. Coloque este mapa no seu contexto http (fora do contexto do servidor):

map $http_referer $log_referer {
  example.com  1;
  default      0;
}

Isso vai para o seu servidor, localização, etc;;

access_log /path/to/bad_domain.log combined if=$log_referer;
    
por 26.08.2015 / 22:41
1

Sua segunda tentativa [ Editar 2 ] está tendo a sintaxe correta, mas acho que o erro ocorre quando você está usando uma versão mais antiga do NGINX. O ' if ' no registro de acesso foi introduzido no NGINX 1.7, veja as notas de lançamento .

Se você instalou o NGINX a partir do repositório do Ubuntu, eles estão enviando a versão 1.4.x. Execute nginx com -V para saber qual versão você está executando.

$ nginx -V                                                                                         
nginx version: nginx/1.8.0   

Eu configurei a configuração do NGINX no seguinte violino:

link

Dê uma olhada! para saber como extrair a versão mais recente do NGINX e trabalhar com o registro condicional.

    
por 27.08.2015 / 08:32
0

Eu enfrentei o mesmo problema e resolvi adicionando combinado ao access_log

access_log /path/to/logs/bad_domain.log combined if=$log_referer;
    
por 19.07.2017 / 10:25