nginx access_logディレクティブのオーバーライド-ログエントリの重複


16

Ubuntu 14.04サーバーでデフォルトのnginxパッケージを使用しています。/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ファイル内に2つのレコードが得られることです。1つはヘッダー情報があり、もう1つは含まれていません。

nginx.confファイル自体を上書きできることは知っていますが、可能であればそれを避けたいです。また、同じログファイル(access.log)を使い続けたいと思います。

nginxに前のディレクティブをオーバーライドし、メインnginx.confファイルを変更せずにログ形式を単に変更するように指示する方法はありますか?


いや。ただ、nginx.confからそれを削除
アレクセイテン

1
これのチケットを開きました。trac.nginx.org/nginx/ticket/1084
cweiske

回答:


4

あなたの質問への答えはNOです。nginxのどのレベルでもlog_formatをオーバーライドすることはできず、同じレベルにあるときはoff_offを除いて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;

それはあなたが最初に望んでいたものを得るはずです。


おかげで、それはうまく機能します。通常は既にmainlog_formatがあるため、別の名前を選択する必要があります。
クッツィ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.