Wie deaktiviere ich die Apache-Protokollierung beim Zugriff auf bestimmte Verzeichnisse?


7

Wie erhalte ich Apache, um zu verhindern, dass http-Anforderungen auf Verzeichnisbasis protokolliert werden? Ich möchte etwas Ähnliches tun

<IfModule mod_userdir.c>
    UserDir public_html

    <Directory /home/*/public_html/nolog>
        Options NoAccessLog
    </Directory>
</IfModule>

Antworten:


10

Sie können ein Umgebungsflag setzen, wenn eine bestimmte URL angefordert wird, und die Protokollierung basierend darauf filtern:

<IfModule mod_userdir.c> 
    UserDir public_html 

    SetEnvIf Request_URI "/nolog" dontlog
    CustomLog /var/log/apache2/useraccess_log combined env=!dontlog
</IfModule> 

Alle zugehörigen Informationen finden Sie unter http://httpd.apache.org/docs/2.2/env.html Abschnitt "Verwenden von Umgebungsvariablen - Bedingte Protokollierung"

Wenn diese beiden Zeilen eine URL anfordern, die die Zeichenfolge "/ nolog" enthält, wird die Umgebungsvariable dontlog festgelegt.

In der nächsten Zeile weist die Option "env =! Dontlog" die CustomLog-Direktive an, den Clientzugriff zu protokollieren, sofern die Variable dontlog nicht festgelegt ist. Das ! negiert die Richtlinie. Wenn du das verlassen würdest! Damit wird "env = dontlog" angezeigt, als nur der Zugriff auf Pfade protokolliert wird, deren angeforderte URL "/ nolog" enthält.

BEARBEITEN: Ich habe das ^ im regulären Ausdruck "/ nolog" entfernt, um mit Ihrem Beispiel zu arbeiten, und weitere Erklärungen hinzugefügt.


Funktioniert bei mir nicht - der Zugriff ist noch protokolliert. Können Sie bitte etwas näher darauf eingehen und es in das angegebene mod_userdir-Beispiel integrieren? Vielen Dank!
Nidi

Ok, ich habe meine Antwort aktualisiert, um sie Ihrem Beispiel anzupassen. Grundsätzlich lassen Sie das ^ in der regulären Ausdrücke einfach weg. "^ / nolog" würde nur mit URLs wie example.com/nolog/foobar übereinstimmen, aber da Sie immer zuerst einen Benutzernamen wie example.com/~user/nolog/foobar haben, würde dieser nicht übereinstimmen. Also einfach das ^ entfernen und es sollte funktionieren. Natürlich können Sie diesen regulären Ausdruck weiter optimieren, um die Übereinstimmung des Benutzernamens usw. einzuschließen. Jetzt würde er mit jeder URL übereinstimmen, die die Zeichenfolge "/ nolog" enthält.
Lukas Loesche

Ich hatte Probleme, dies zum Laufen zu bringen (Apache 2.2.3), bevor ich von Graceful zu Apachectl Restart wechselte. Dann hat es gut funktioniert.
Antti Rytsölä
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.