やりたかったこと
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.1やaccess.log.2.gzのような名前で残っている。
nginxはデフォルトでlogrotateが設定されていることが多い。
ハマったポイント
- ログが空の場合はnginxが起動していないか、パスが違う可能性がある
systemctl status nginxでnginxの状態を確認してからログを見ると原因が特定しやすかった- 権限がなくて
Permission deniedになる場合はsudoをつけると読めた - 大量アクセスのサーバーでは
tail -nで行数を絞らないとターミナルが固まることがあった - エラーログに
connect() failedが出た場合はリバースプロキシのバックエンドが落ちているサインだった
関連記事
- nginxの基本的な設定ファイルの書き方
- nginx 502 Bad Gatewayエラーの原因と解決方法
- nginxのリバースプロキシ設定(Node.jsアプリをnginxで公開する)
- Linuxでログをリアルタイム監視するtail -fの使い方
- Linuxでファイルを検索するgrep・findコマンドの使い方
おすすめのVPS/ドメイン/スクール
VPSを使って本番環境を構築するなら、以下のサービスがおすすめです。