nginxで設定変更など行っているときに、
実際にどんな値が入っているか確認したい場合があるかと思います。
そんな時に、簡単にログを出力して確認する方法をまとめてみました。
設定方法
httpコンテキストの定義内にログフォーマットの設定を追記します。
今回はdebug.logを新たに作り、そこに出力させてみたいと思います。
http {
log_format debug 'time:$time_local\t' # 時刻
'status:$status\t' # ステータス
'value:$value'; # 値
access_log /var/log/nginx/debug.log debug;
}
『httpディレクティブ』 …HTTPサーバに関する設定
『log_formatディレクティブ』 …出力するログの書式を定義する
・構文: log_format フォーマット名 ログの書式文字列
・コンテキスト: http
・構文: log_format フォーマット名 ログの書式文字列
・コンテキスト: http
server {
set $value "hoge";
}
『serverディレクティブ』 …IPアドレス、ポート、ホスト名ごとに別々の設定を持つ複数のHTTPサーバを定義する
『setディレクティブ』 …nginxの内部変数に文字列をセットする
・構文: set $変数名 値;
・コンテキスト: server, location, if
・構文: set $変数名 値;
・コンテキスト: server, location, if
この状態で、nginxをリロード後、ブラウザからアクセスしてみます。
time:17/Dec/2016:13:56:32 +0900 status:404 value:hoge
無事debug.logにログが書き出されました。
主な変数
その他にも、アクセスログで使用できる主な変数名を紹介します。
変数名 | 説明 |
---|---|
$time_local | リクエストの処理を開始したローカルタイム |
$remote_addr | リモートホストのアドレス |
$host | マッチしたサーバ名もしくはHostヘッダの値、なければリクエスト内のホスト |
$request_method | リクエストされたHTTPメソッド |
$request_uri | リクエストに含まれるクエリストリング付きのオリジナルのURI |
$server_protocol | リクエストプロトコル |
$request_time | リクエスト処理にかかった時間 |
$body_bytes_sent | ヘッダなどを含まないレスポンスボディのバイト数 |
$status | レスポンスのHTTPステータスコード |
$http_referer | リファラ |
$http_user_agent | ユーザエージェント文字列 |
こういったログを活用することで、
開発やデバックが必要なときなど色々な場面で利用できると思います。