Überschreiben der Nginx-Access_log-Direktive – doppelte Protokolleinträge

Überschreiben der Nginx-Access_log-Direktive – doppelte Protokolleinträge

Ich verwende das Standardpaket nginx auf einem Ubuntu 14.04-Server. Es wird /etc/nginx/nginx.confals Hauptkonfiguration verwendet und enthält dann Konfigurationen von /etc/nginx/conf.d/*.confund /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.dOrdners:

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.

verwandte Informationen