remplacement de la directive nginx access_log - entrées de journal en double


16

J'utilise le package nginx par défaut sur le serveur Ubuntu 14.04. Il utilise /etc/nginx/nginx.confcomme configuration principale, puis inclut les configurations depuis /etc/nginx/conf.d/*.confet /etc/nginx/sites-enabled/*.

La configuration par défaut de nginx a cette directive pour se connecter au journal d'accès

access_log /var/log/nginx/access.log;

Je voudrais ajouter l'en-tête X-Forwarded-For, donc je fais cela à l'intérieur du conf.ddossier:

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;

Le problème que j'ai est que j'obtiens alors deux enregistrements dans mon fichier access.log - un avec les informations d'en-tête et un autre sans.

Je sais que je peux écraser le nginx.conffichier lui-même, mais je préfère l'éviter si possible. Je voudrais également continuer à utiliser le même fichier journal ( access.log).

Existe-t-il un moyen de dire à nginx de remplacer la directive précédente et de simplement changer le format du journal sans modifier le nginx.conffichier principal ?


Nan. Il suffit de le supprimer de nginx.conf
Alexey Ten

1
J'ai ouvert un ticket pour cela; trac.nginx.org/nginx/ticket/1084
cweiske

Réponses:


4

la réponse à votre question est NON, vous ne pouvez pas remplacer un log_format à n'importe quel niveau dans nginx et vous ne pouvez pas remplacer access_log au même niveau, sauf le désactiver. Cependant, vous pouvez réaliser ce que vous vouliez sans changer nginx.conf mais vous devrez le faire au niveau du serveur {}.

Le problème ici est que l'inclusion de conf.d / * est à l'intérieur de http {}, qui est exactement où se trouve la directive access_log. Ce que vous pouvez faire sans toucher nginx.conf, c'est changer le serveur {} que vous utilisez (si vous n'en avez pas configuré un, vous utilisez celui par défaut situé dans / etc / nginx / sites-enabled / default). Donc, pour obtenir le même résultat sans modifier nginx.conf, vous devez modifier votre fichier dans le dossier conf.d en: 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;

Et puis à l'intérieur de votre serveur {} mettez: access_log /var/log/nginx/access.log main;

Cela devrait vous donner ce que vous vouliez au début.


Merci, ça marche très bien. Sauf qu'il y a généralement déjà un mainlog_format, de sorte que vous devez choisir un autre nom.
Kutzi
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.