Como bloquear instruções de log de acesso Nginx de agentes de usuários específicos

6

Estou tentando desativar o registro no arquivo de log de acesso Nginx de solicitações específicas de agentes de usuários http.

Basicamente, a partir do Amazon Health Check e do monitoramento externo (Pingdom). Como isso ocorre a cada poucos segundos, dificulta o teste para classificar os registros.

"GET / HTTP/1.1" 200 727 "-" "ELB-HealthChecker/1.0"
"GET /login HTTP/1.1" 200 7492 "-" "Pingdom.com_bot_version_1.4_(http://www.pingdom.com/)"

Consegui bloquear o registro de arquivos de imagem, mas não vi nada para solicitações recebidas:

location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml|svg)$ {
        access_log        off;
        expires           30d;
}

Obrigado antecipadamente!

Então eu tentei a recomendação da @Gnarfoz, mas tive alguns efeitos colaterais interessantes. Enquanto essas duas "verificações de saúde" não foram registradas, Pingdom começou a reconhecer o servidor como DOWN mesmo quando estava em funcionamento. Isso é interessante, pois o Balanceador de Carga não o fez, o que teria descartado o nó que estávamos testando se tivesse.

Eu coloquei a seção MAP no bloco HTML abaixo dos meus logs:

access_log /www/access.log;
error_log /www/error.log;

map $http_user_agent $ignore_ua {
            default                 0;
            "~Pingdom.*"            1;
            "ELB-HealthChecker/1.0" 1;
    }

E eu coloquei a instrução IF no meu bloco de servidor, com a localização padrão:

location / {
                try_files $uri $uri/ /index.php?$args;

                if ($ignore_ua) {
                       access_log off;
                }
        }

Quando fiz isso, Pingdom começou a gerar erros 404 no arquivo de registro de erros:

2012/08/03 17:10:33 [error] 6250#0: *164 open() "/www/public_html/login" failed (2: No such file or directory), client: 10.xx.xx.xx, server: xxx.com, request: "GET /login HTTP/1.1", host: "xxx.com"
2012/08/03 17:11:32 [error] 6250#0: *240 open() "/www/public_html/login" failed (2: No such file or directory), client: 10.xx.xx.xx, server: xxx.com, request: "GET /login HTTP/1.1", host: "xxx.com"
    
por briannyc 03.08.2012 / 16:54

1 resposta

3

Tente isto:

# map goes *outside* of the "server" block
map $http_user_agent $ignore_ua {
    default                 0;
    "~Pingdom.*"            1;
    "ELB-HealthChecker/1.0" 1;
}

server {
    # Things omitted for brevity

    location / {
        if ($ignore_ua) {
            access_log off;
            return 200;
        }
    }
}    

A parte if provavelmente precisaria ser integrada ao seu bloco de localização apropriado.

Documentação relevante do nginx: mapa , if , access_log

    
por 03.08.2012 / 17:29