Nginx-Zugriffsprotokolle ignorieren bestimmte Anforderungen

8

Ich verwende Nginx hinter Haproxy (läuft auf demselben Server). Ich habe haproxy so konfiguriert, dass eine einfache HTML-Datei auf nginx verwendet wird, um zu überprüfen, ob der Dienst aktiv ist, da ich auf diesem Host keine gültige "/" -URL habe / möchte. Nginx unterstützt den OPTIONS-Anforderungstyp (soweit ich weiß) nicht. Dies ist der Standard, den Haproxy verwendet. Daher habe ich ihn in GET geändert.

Da in nginx Zugriffsprotokolle aktiviert sind, werden alle diese Abfrageanforderungen zur Verfügbarkeit in meinem Zugriffsprotokoll angezeigt. Gibt es eine Möglichkeit, nginx so zu konfigurieren, dass bestimmte Anforderungen ignoriert und die Protokollierung übersprungen werden?

Hier ist das Haproxy-Backend:

backend static_http
        option  httpchk GET /test.html
        option  redispatch
        balance roundrobin
        #fullconn 1000
        server  w1_static www1:81 check port 81 inter 2000

Und hier ist, was ich in den Nginx-Protokollen sehe:

127.0.0.1 - - [24/Jul/2009:19:28:22 +0000] "GET /test.html HTTP/1.0" 200 12 "-" "-"
127.0.0.1 - - [24/Jul/2009:19:28:24 +0000] "GET /test.html HTTP/1.0" 200 12 "-" "-"
127.0.0.1 - - [24/Jul/2009:19:28:26 +0000] "GET /test.html HTTP/1.0" 200 12 "-" "-"
127.0.0.1 - - [24/Jul/2009:19:28:28 +0000] "GET /test.html HTTP/1.0" 200 12 "-" "-"
127.0.0.1 - - [24/Jul/2009:19:28:30 +0000] "GET /test.html HTTP/1.0" 200 12 "-" "-"
Michael Marano
quelle

Antworten:

8

Sie können dies jetzt tun

http://nginx.org/en/docs/http/ngx_http_log_module.html

Der if-Parameter (1.7.0) aktiviert die bedingte Protokollierung. Eine Anforderung wird nicht protokolliert, wenn die Bedingung "0" oder eine leere Zeichenfolge ergibt

map $request_uri $loggable {
  / 0;
  /healthcheck.html 0;
  default 1;
}

server {
...
  access_log /var/log/nginx/access.log combined if=$loggable;

}
KCD
quelle
7

Nun, Sie könnten versuchen, eine bestimmte Standortrichtlinie dafür zu haben.

Etwas wie

location /test.html {
  access_log off;
}

sollte funktionieren (ungetestet) ...

Jauder Ho
quelle
0

Es gibt keine integrierte Filterung, die das tut, was Sie wollen.

Es gibt jedoch einige Tricks, die Sie ausprobieren könnten. Dies alles führt dazu, dass die Daten, an denen Sie nicht interessiert sind, in einer anderen Datei protokolliert werden, die Sie extern nuklearisieren können (denken Sie danach an HUP nginx), so oft Sie dies für angemessen halten.

  • Wenn nur haproxy /test.html anfordert, können Sie pro Standortblock ein anderes Zugriffsprotokoll haben (leider nicht für einen if-Block innerhalb eines Standortblocks).

  • Wenn andere Knoten /test.html anfordern, aber alle Anforderungen von 127.0.0.1 haproxy sind, können Sie eine Zuordnung basierend auf $ remote_addr erstellen, die 127.0.0.1 in access_log.junk und alles andere in access_log übersetzt. Verwenden Sie die Map-Variable im Namen der Zugriffsprotokollanweisung

Gelingt dies nicht, haben Sie die Quelle, also hacken Sie, was Sie brauchen.

James F.
quelle