
Ich verwende das Standardpaket nginx auf einem Ubuntu 14.04-Server. Es wird /etc/nginx/nginx.conf
als Hauptkonfiguration verwendet und enthält dann Konfigurationen von /etc/nginx/conf.d/*.conf
und /etc/nginx/sites-enabled/*
.
Die Standardkonfiguration von nginx enthält diese Anweisung zum Protokollieren im Zugriffsprotokoll
access_log /var/log/nginx/access.log;
Ich möchte den Header „X-Forwarded-For“ hinzufügen, also mache ich Folgendes innerhalb des conf.d
Ordners:
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;
Mein Problem besteht darin, dass ich dann zwei Datensätze in meiner access.log-Datei erhalte – einen mit den Header-Informationen und einen ohne.
Ich weiß, dass ich die Datei selbst überschreiben kann nginx.conf
, aber ich würde das nach Möglichkeit vermeiden. Außerdem möchte ich 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
?
Antwort1
die Antwort auf Ihre Frage ist NEIN, Sie können ein log_format auf keiner Ebene in nginx überschreiben und Sie können access_log auf derselben Ebene nicht überschreiben, außer indem Sie es ausschalten. Sie können jedoch erreichen, was Sie wollten, ohne nginx.conf zu ändern, aber Sie müssen dies auf Serverebene {} tun.
Das Problem hier ist, dass sich der Include von conf.d/* innerhalb des http {} befindet, und genau dort steht die access_log-Direktive. Was Sie tun können, ohne nginx.conf zu berühren, ist, den von Ihnen verwendeten Server{} zu ändern (wenn Sie keinen eingerichtet haben, verwenden Sie den Standardserver unter /etc/nginx/sites-enabled/default). Um dasselbe zu erreichen, ohne nginx.conf zu ändern, sollten Sie Ihre Datei im Ordner conf.d wie folgt ä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 geben Sie in Ihren Server{} Folgendes ein:
access_log /var/log/nginx/access.log main;
Damit sollten Sie bekommen, was Sie am Anfang wollten.