Nginxが出力するアクセスログの情報について調べたので、出力される情報について説明していきます。
アクセスログの設定
Nginxのサーバ全体に対するアクセスログの設定は「/etc/nginx/nginx.conf」のhttpディレクティブに記述されています。
以下はアクセスログに関する設定部分を抜粋したものです。
- 「log_format」 ログのフォーマットを定義
- 「access_log」 ログの出力先と出力フォーマットを指定
http { 省略 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; 省略 }
ログフォーマットはカスタマイズ可能で、上記の例では「main」という名前でフォーマットを定義しています。
今回は上記の設定を元に、アクセスログの各項目について説明していきます。
出力される項目の説明
アクセスログの出力例
以下は実際にNginxが出力したアクセスログになります。
xxx.xxx.xxx.xxx - - [18/Mar/2025:09:35:01 +0900] "GET /shellscript/bash_function.html HTTP/1.1" 200 283771 "https://www.server-memo.net/category/shellscript" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36"
このログを使用して出力される内容の解説を行います。
$remote_addr
接続してきたクライアントのIPアドレスを表示します。
xxx.xxx.xxx.xxx - - [18/Mar/2025:09:35:01 +0900] "GET /shellscript/bash_function.html HTTP/1.1" 200 283771 "https://www.server-memo.net/category/shellscript" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36"
※実際のIPアドレスなのでマスクしてます。
-
ログを読みやすくするための仕切り用文字で、そのまま「-」と表示されています。
xxx.xxx.xxx.xxx - - [18/Mar/2025:09:35:01 +0900] "GET /shellscript/bash_function.html HTTP/1.1" 200 283771 "https://www.server-memo.net/category/shellscript" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36"
$remote_user
Basic認証等が使用されている場合に、認証されたユーザ名が表示されます。
認証が行われていない場合は「-」が表示されます。
xxx.xxx.xxx.xxx - - [18/Mar/2025:09:35:01 +0900] "GET /shellscript/bash_function.html HTTP/1.1" 200 283771 "https://www.server-memo.net/category/shellscript" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36"
[$time_local]
サーバに設定されているローカルタイムゾーンでのアクセス日時が以下の形式で表示されます。
xxx.xxx.xxx.xxx - - [18/Mar/2025:09:35:01 +0900] "GET /shellscript/bash_function.html HTTP/1.1" 200 283771 "https://www.server-memo.net/category/shellscript" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36"
"$request"
クライアントからのリクエスト内容が表示されます。
リクエスト内容には、HTTPメソッド、リクエストURI、HTTPプロトコルのバージョンが含まれます。
xxx.xxx.xxx.xxx - - [18/Mar/2025:09:35:01 +0900] "GET /shellscript/bash_function.html HTTP/1.1" 200 283771 "https://www.server-memo.net/category/shellscript" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36"
今回の場合はそれぞれ以下のようになります。
- HTTPメソッド: GET
- リクエストURI:/shellscript/bash_function.html
- HTTPプロトコルのバージョン: HTTP/1.1
$status
クライアントに返したHTTPステータスコードが表示されます。
xxx.xxx.xxx.xxx - - [18/Mar/2025:09:35:01 +0900] "GET /shellscript/bash_function.html HTTP/1.1" 200 283771 "https://www.server-memo.net/category/shellscript" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36"
HTTPステータスコードの一覧は以下のページで確認できます。
https://developer.mozilla.org/ja/docs/Web/HTTP/Reference/Status
$body_bytes_sent
クライアントに送信したレスポンスボディのバイト数が表示されます。
xxx.xxx.xxx.xxx - - [18/Mar/2025:09:35:01 +0900] "GET /shellscript/bash_function.html HTTP/1.1" 200 283771 "https://www.server-memo.net/category/shellscript" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36"
"$http_referer"
リクエストを行う前にアクセスしていたWebページのURLが表示されます。
直接アクセスやブックマークからのアクセスなどの場合はハイフン(-)が表示されます。
xxx.xxx.xxx.xxx - - [18/Mar/2025:09:35:01 +0900] "GET /shellscript/bash_function.html HTTP/1.1" 200 283771 "https://www.server-memo.net/category/shellscript" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36"
"$http_user_agent"
クライアントのブラウザやHTTPクライアントの種類が表示されます。
xxx.xxx.xxx.xxx - - [18/Mar/2025:09:35:01 +0900] "GET /shellscript/bash_function.html HTTP/1.1" 200 283771 "https://www.server-memo.net/category/shellscript" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36"
"$http_x_forwarded_for"
クライアントとサーバーの間でプロキシサーバやロードバランサを経由して通信している場合に、それぞれのIPアドレスを表示します。
元のクライアントIPアドレスを特定するための情報となります。
今回はプロキシサーバを経由していないので空欄となっていますが、プロキシサーバを経由している場合は以下のように表示されます。
X-Forwarded-For: クライアントIP, プロキシサーバ1のIP, プロキシサーバ2のIP
X-Forwarded-Forには任意の値を設定できるため、なりすましや、誤った設定の可能性もあります。
コメント