NGINX-Protokollierung funktioniert nicht, wenn alle im Standortblock verweigert werden

NGINX-Protokollierung funktioniert nicht, wenn alle im Standortblock verweigert werden

Ich fand dieses Verhalten ziemlich merkwürdig und werde deshalb hier nachfragen.

Nehmen Sie diesen Standortblock;

location ~ /(wp-config.php|readme.html|licence.txt|license.txt|readme.txt) {
    access_log /var/log/nginx/blocked.log blocked;
    deny all;
}

Es wird nichts in die Protokolldatei geschrieben, aber wenn ich diealles leugnen; - das tut es. Dasselbe gilt fürRückgabe 403usw

Ich möchte blockierte Anfragen protokollieren.

nginx version: nginx/1.8.0

AKTUALISIEREN

Die Ursache hierfür scheint darin zu liegen, dass Sie Ihre eigenen Fehlerseiten definieren. Zum Beispiel:

http {  ..
    error_page          403          /error/403.html;
    error_page          404          /error/404.html;
.. }

Das Entfernen dieser Zeilen ermöglichte die Protokollierung

Antwort1

Zu überprüfende Punkte:

  1. Haben Sie definiert blocked?
  2. Oder ist der Pfad zur Protokolldatei korrekt?
  3. Überprüfen Sie locationdie Reihenfolge, da wp-config.phpsie höchstwahrscheinlich übereinstimmt location ~ \.php$oder ähnlich ist.

Bei mir funktioniert es mit nginx: 1.7.11.1Gryphon, obwohl es eine Windows-Umgebung ist.

Hier ist mein Setup:

http {
    ...
    log_format robots   '$remote_addr - $remote_user [$time_local] '
                        '$host "$request" $status $body_bytes_sent '
                        '"$http_referer" "$http_user_agent"';
    ...
    server {

    ...
        location ~/(robots.txt|readme.html) {
            access_log  logs/nginx-access-robots.log robots;
            deny all;
        }
    ...
    }

}

verwandte Informationen