NGINXでリクエストヘッダーをログに出力するには、カスタムログフォーマットを設定し、特定のリクエストヘッダーをログに含めるように設定します。以下に手順を説明します。
手順
1. nginx.conf
にカスタムログフォーマットを追加
nginx.conf
ファイルを編集して、log_format
ディレクティブでカスタムフォーマットを定義します。例として、X-Custom-Header
ヘッダーをログに記録する場合は次のように設定します。
http { log_format custom '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_x_custom_header" "$http_user_agent"'; access_log /var/log/nginx/access.log custom; }
-
$http_x_custom_header
: リクエストヘッダーX-Custom-Header
の値を取得します。 - 他のヘッダーを記録したい場合は、
$http_ヘッダー名
の形式で記述します(ヘッダー名は小文字で記述し、ハイフンはアンダースコア_
に置き換えます)。
2. サーバーブロックでログフォーマットを有効化
すべてのサーバーブロックまたは特定のサーバーブロックに以下を追加します。
server {
...
access_log /var/log/nginx/access.log custom;
...
}
3. NGINX をリロード
設定を保存したら、以下のコマンドでNGINXを再読み込みします。
sudo nginx -t # 設定ファイルのテスト
sudo systemctl reload nginx # NGINXを再読み込み
例: ログ出力の例
例えば、リクエストヘッダーに以下が含まれていた場合:
X-Custom-Header: TestValue User-Agent: curl/7.68.0
ログには次のように出力されます:
127.0.0.1 - - [20/Nov/2024:12:34:56 +0000] "GET / HTTP/1.1" 200 612 "TestValue" "curl/7.68.0"
注意点
- セキュリティ: ログにセンシティブな情報(認証トークンやパスワードなど)を含めないよう注意してください。
- ログの管理: ヘッダーを多く記録するとログが膨大になる可能性があるため、ログローテーションやストレージの管理も考慮してください。
必要に応じて他のヘッダーもログに出力できるよう設定を拡張してください。