Soweit ich sehen kann, unterstützt Nginx standardmäßig 2 Protokolldateien: error_log
(verfolgt Probleme im Zusammenhang mit dem Nginx-Server selbst) und access_log
(verfolgt von Nginx verarbeitete Anforderungen). Obwohl es möglich ist, das Format access_log
mit der log_format
Richtlinie zu steuern , ist es mir nicht gelungen, eine Möglichkeit zu finden, nur bestimmte Anforderungen in einer separaten Datei zu protokollieren, und ich möchte daher die Frage zu SF als Referenz für zukünftige Leser stellen:
Gibt es eine Möglichkeit, bestimmte Anforderungen in einer anderen als der von definierten Protokolldatei zu protokollieren access_log
?
Zu Ihrer Information, der Grund für diese Frage ist, dass ich eine Regel habe, die den Zugriff auf unerwünschte Crawler mit einer 200 verweigert (weil 403 ihnen einen Hinweis geben würde, dass sie blockiert werden), und das Herausfiltern dieser Anforderungen aus der access_log
wird schwieriger.
Antworten:
cjc
Bring mich auf den richtigen Weg. Die Verwendungaccess_log
in einerif
Anweisung allein ist nicht möglich (Sie erhalten einenginx: [emerg] "access_log" directive is not allowed here
Fehlermeldung). Die Problemumgehung lautet also wie folgt:quelle
Context: http, server, location, **if in location**, limit_except
access_log unterstützt wenn:
(access_log path [format [buffer = size [flush = time]] [if = condition]];)
access_log /var/.... if $crawler;
Quelle:
http://nginx.org/en/docs/http/ngx_http_log_module.html
quelle
NGINX 1.7.0
.Sie sollten in der Lage sein, eine
access_log
Direktiveif
gemäß der Dokumentation in einen Block einzufügen:http://wiki.nginx.org/HttpLogModule
Sie sollten also in der Lage sein, Folgendes zu tun:
quelle
access_log
Insider-if
Aussage an sich ist nicht möglich, siehe meine Antwort unten.