Como desativar o log de acesso para apenas uma determinada URL nesta configuração nginx?

1

Esta é uma configuração nginx

server {
    listen $PORT;

    location ~ ^/documents/(.*)$ {
        proxy_pass http://127.0.0.1:5000/$1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location = /favicon.ico {
        return 204;
        access_log    off;
        log_not_found off;
    }
}

Existem dois casos de uso do URL /documents/ :

POST para /documents/ para algum processamento ou

GET para /documents/ping usado pelo AWS ELB como verificação de integridade

No log do cloudwatch, recebi várias entradas de pings como resultado

Qual é a maneira mais fácil de pedir ao nginx para não registrar o ping?

    
por Anthony Kong 18.09.2017 / 02:44

1 resposta

1

Aqui está uma maneira fácil: adicione este bloco de localização.

 location ~ /documents/ping {
    proxy_pass http://127.0.0.1:5000/$1;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    access_log    off;
    log_not_found off;
}

Existem maneiras provavelmente mais limpas. Uma é definir o conteúdo compartilhado dos dois blocos como um arquivo e incluí-lo, mas para um único eu não me incomodaria.

Observação - não use declarações if a menos que você não possa ajudar isto.

Atualizar

Se você quiser fazer uma inclusão, faça algo assim

location ~ ^/documents/(.*)$ {
  include /path/to/fragment.conf;
}

 location /documents/ping {
  include /path/to/fragment.conf;

  access_log    off;
  log_not_found off;
}

No arquivo fragment.conf

  proxy_pass http://127.0.0.1:5000/$1;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

Concorda que o ~ não era necessário, mas também não acho que seria prejudicial.

    
por 18.09.2017 / 03:25