web-dev-qa-db-ja.com

nginx access_logディレクティブの上書き-ログエントリの重複

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ファイルを変更せずにログ形式を変更するように指示する方法はありますか?

17
Yoav Aner

あなたの質問への答えはNOです、あなたはそれをオフにすることを除いて、nginxのどのレベルでもlog_formatを上書きすることはできず、同じレベルにあるとき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;

それはあなたが最初に欲しかったものを手に入れるはずです。

6
Valor