переопределення директиви nginx access_log - дублюючі записи журналу


17

Я використовую пакет nginx за замовчуванням на сервері Ubuntu 14.04. Він використовується /etc/nginx/nginx.confв якості основного конфігурації, а потім включає конфігурації з /etc/nginx/conf.d/*.confі /etc/nginx/sites-enabled/*.

Конфігурація nginx за замовчуванням містить цю директиву для входу в журнал доступу

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

Я хотів би додати заголовок X-Forwarded-For, тому я роблю це всередині conf.dпапки:

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;

Проблема у мене полягає в тому, що тоді я отримую два записи у своєму файлі access.log - один із інформацією заголовка та інший без.

Я знаю, що я можу перезаписати сам nginx.confфайл, але я скоріше уникаю його, якщо можливо. Я також хотів би продовжувати використовувати той самий файл журналу ( access.log).

Чи є спосіб сказати nginx, щоб замінити попередню директиву та просто змінити формат журналу, не змінюючи головний nginx.confфайл?


Ні. Просто видаліть його з nginx.conf
Олексій Десять

1
Я відкрив для цього квиток; trac.nginx.org/nginx/ticket/1084
cweiske

Відповіді:


6

відповідь на ваше запитання - НІ, ви не можете змінити log_format на будь-якому рівні в nginx, і ви не можете замінити access_log, коли ви знаходитесь на одному рівні, крім вимкнення. Однак ви можете досягти того, що хотіли, не змінюючи nginx.conf, але вам доведеться це робити на рівні сервера {}.

Проблема тут полягає в тому, що включати conf.d / * знаходиться всередині http {}, саме там знаходиться директива access_log. Те, що ви можете зробити, не торкаючись nginx.conf, - це змінити сервер {}, який ви використовуєте (якщо ви не встановили жодного, ви використовуєте за замовчуванням, який знаходиться за адресою / etc / nginx / sites-enable / default). Отже, щоб досягти того ж, не змінюючи nginx.conf, ви повинні змінити свій файл у папці conf.d на: 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;

А потім всередині вашого сервера {} поставте: access_log /var/log/nginx/access.log main;

Це повинно отримати вам те, що ви хотіли на початку.


Дякую, це чудово працює. За винятком того, що зазвичай вже є mainlog_format, тож вам потрібно вибрати інше ім’я.
Куцці
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.