Я использую пакет 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
файл?
ответ на ваш вопрос - НЕТ, вы не можете переопределить log_format на любом уровне в nginx, и вы не можете переопределить access_log на том же уровне, кроме его отключения. Однако вы можете добиться желаемого, не изменяя nginx.conf, но вам придется делать это на уровне сервера {}.
Проблема здесь в том, что включение conf.d / * находится внутри http {}, а именно там, где находится директива access_log. Что вы можете сделать, не касаясь nginx.conf, - это изменить любой сервер {}, который вы используете (если вы его не настраивали, вы используете сервер по умолчанию, расположенный в / etc / nginx / sites-enabled / 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;
Это должно дать вам то, что вы хотели вначале.