
/etc/nginx/nginx.conf
Ubuntu 14.04 サーバーでデフォルトの nginx パッケージを使用しています。 をメイン構成として使用し、/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
?
答え1
質問に対する答えは「いいえ」です。nginx のどのレベルでも log_format を上書きすることはできません。また、同じレベルで access_log を上書きすることもできません (ただし、オフに切り替えることはできます)。ただし、nginx.conf を変更せずに目的を達成することはできますが、server {} レベルで実行する必要があります。
ここでの問題は、conf.d/* の include が http {} 内、つまり access_log ディレクティブがある場所内にあることです。nginx.conf を変更せずに実行できることは、使用している server{} を変更することです (設定していない場合は、/etc/nginx/sites-enabled/default にあるデフォルトの server{} を使用します)。したがって、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;
そうすれば、最初に望んでいたものが手に入るはずです。