やりたかったこと

nginxが正常に動いているか確認したかった。 アクセスが来ているのにページが表示されない時に、ログを追いかけて原因を特定した。

ログファイルの場所

nginxのログは通常ここにある。

/var/log/nginx/access.log   # アクセスログ
/var/log/nginx/error.log    # エラーログ

設定ファイルで確認もできる。

grep log /etc/nginx/nginx.conf

アクセスログの確認方法

リアルタイムで監視する

tail -f /var/log/nginx/access.log

直近100行だけ見る

tail -n 100 /var/log/nginx/access.log

特定IPのアクセスを絞り込む

grep "192.168.1.1" /var/log/nginx/access.log

404エラーだけ抽出する

grep " 404 " /var/log/nginx/access.log

アクセス数の多いURLを集計する

awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20

エラーログの確認方法

エラーログをリアルタイム監視する

tail -f /var/log/nginx/error.log

errorレベル以上のログだけ見る

grep "\[error\]" /var/log/nginx/error.log

エラーの種類はこんな感じ:

レベル内容
notice通常動作の通知
warn警告(動作には問題なし)
errorエラー(要確認)
crit深刻なエラー

アクセスログのフォーマットを読む

デフォルトのアクセスログはこんな形式だった。

192.168.1.1 - - [28/May/2026:10:00:00 +0900] "GET /index.html HTTP/1.1" 200 1234 "-" "Mozilla/5.0..."

左から順に:

  • クライアントIP
  • リモートユーザー(基本は-
  • 認証ユーザー(基本は-
  • アクセス日時
  • リクエスト内容
  • ステータスコード
  • レスポンスサイズ(バイト)
  • リファラー
  • ユーザーエージェント

ログローテーションの確認

ls -la /var/log/nginx/

古いログはaccess.log.1access.log.2.gzのような名前で残っている。 nginxはデフォルトでlogrotateが設定されていることが多い。

ハマったポイント

  • ログが空の場合はnginxが起動していないか、パスが違う可能性がある
  • systemctl status nginxでnginxの状態を確認してからログを見ると原因が特定しやすかった
  • 権限がなくてPermission deniedになる場合はsudoをつけると読めた
  • 大量アクセスのサーバーではtail -nで行数を絞らないとターミナルが固まることがあった
  • エラーログにconnect() failedが出た場合はリバースプロキシのバックエンドが落ちているサインだった

関連記事

おすすめのVPS/ドメイン/スクール

VPSを使って本番環境を構築するなら、以下のサービスがおすすめです。