Ich verwende das Standard-Nginx-Paket auf dem Ubuntu 14.04-Server. Es wird /etc/nginx/nginx.conf
als Hauptkonfiguration verwendet und enthält dann die Konfigurationen von /etc/nginx/conf.d/*.conf
und /etc/nginx/sites-enabled/*
.
Die Standardkonfiguration von nginx enthält diese Anweisung für die Protokollierung im Zugriffsprotokoll
access_log /var/log/nginx/access.log;
Ich möchte den X-Forwarded-For-Header hinzufügen, also mache ich das im conf.d
Ordner:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
Das Problem, das ich habe, ist, dass ich dann zwei Datensätze in meiner Datei access.log erhalte - einen mit der Header-Information und einen anderen ohne.
Ich weiß, dass ich die nginx.conf
Datei selbst überschreiben kann, aber ich würde sie nach Möglichkeit lieber vermeiden. Ich möchte auch weiterhin dieselbe Protokolldatei verwenden ( access.log
).
Gibt es eine Möglichkeit, nginx anzuweisen, die vorherige Anweisung zu überschreiben und einfach das Protokollformat zu ändern, ohne die Hauptdatei zu ändern nginx.conf
?
quelle
Antworten:
Die Antwort auf Ihre Frage lautet NEIN. Sie können ein log_format auf keiner Ebene in nginx überschreiben, und Sie können access_log nicht überschreiben, wenn Sie sich auf derselben Ebene befinden, außer wenn Sie es ausschalten. Sie können jedoch das Gewünschte erreichen, ohne die Datei nginx.conf zu ändern, müssen dies jedoch auf Serverebene {} tun.
Das Problem hierbei ist, dass sich das Include von conf.d / * im http {} befindet, genau dort, wo sich die Direktive access_log befindet. Was Sie tun können, ohne nginx.conf zu berühren, ist, den verwendeten Server {} zu ändern (wenn Sie keinen eingerichtet haben, verwenden Sie den Standardserver unter / etc / nginx / sites-enabled / default). Um dasselbe zu erreichen, ohne die Datei nginx.conf zu ändern, sollten Sie Ihre Datei im Ordner conf.d folgendermaßen ändern:
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log off;
Und dann in deinen Server {} legen:
access_log /var/log/nginx/access.log main;
Das sollte dir zu Beginn das bringen, was du wolltest.
quelle
main
log_format gibt, so dass Sie einen anderen Namen wählen müssen.