コース一覧
サーバー運用実践:セキュリティ・監視・デプロイ
エラーログ監視

サーバー運用実践:セキュリティ・監視・デプロイ

構築済みのnginxサーバーを、専用ユーザー・SSH鍵認証・ufwで保護し、HTTPS化、ログとヘルスチェックの監視、systemdタイマー、リリース切替、ロールバック、障害復旧までを実践します。本番を想定した安全な公開・監視・デプロイの基本を身につける30レッスンのコースです。

1
セキュリティのきほん
01. 専用ユーザーで動かす16分
02. SSH鍵認証16分
03. sshdを固める16分
04. ufwファイアウォール16分
05. ポートの棚卸し16分
06. ミッション サーバーを固める16分
07. 第4章クイズ12分
2
HTTPS
01. HTTPSとTLSのしくみ16分
02. 自己署名証明書を作る16分
03. nginxにHTTPSを設定16分
04. HTTPからのリダイレクト16分
05. ミッション HTTPS化完了16分
06. 第5章クイズ12分
3
運用と監視
01. tmuxで多重端末16分
02. ログローテーション16分
03. エラーログ監視16分
04. ヘルスチェック16分
05. systemdタイマー16分
06. ミッション 監視の自動化16分
07. 第6章クイズ12分
4
デプロイ
01. デプロイの型16分
02. シンボリックリンク16分
03. deploy.sh v216分
04. ロールバック16分
05. ミッション ワンコマンドデプロイ16分
06. 第7章クイズ12分
5
総合制作
01. ゼロから構築ミッション16分
02. 障害対応演習16分
03. 自由拡張16分
04. 完成と次のステップ16分

エラーログ監視

アクセスログには、原因が書かれていない

3章で作ったアクセスログには、リクエストの結果が並びます。403 が返ったことは分かりますが、なぜ 403 だったのかは書かれていません。原因が書いてあるのは、もう1つのログのほうです。

nginx

error_log /var/log/nginx/mysite-error.log warn;

アクセスログと同じく、server ブロックごとに分けられます。うしろの warn は、どの深刻さから記録するかの指定です。

深刻さには段階がある

記録する水準は、軽いものから重いものへ並んでいます。

  • debug — 開発時の細かい情報。量が膨大になる
  • info — 通常の出来事
  • notice — 気に留めておく程度
  • warn — 警告。運用ではここから見る
  • error — 処理に失敗した
  • crit — 深刻。サーバー自体が危うい

指定した水準以上が記録されます。warn と書けば warn から crit までが入り、info や debug は捨てられます。既定は error なので、警告を拾いたければ warn と明示します。

debug はふだん使いません。1リクエストで何十行も出るため、ディスクを埋めますし、肝心の行が埋もれます。原因が分からないときだけ一時的に上げて、済んだら戻す。この使い方が基本です。

実際にエラーを起こして読む

読み方は、起こしてみるのがいちばん早いです。ファイルを nginx から読めない状態にしてみます。

ターミナル

chmod 000 /var/www/mysite/secret.html
curl -sI http://localhost/secret.html
# HTTP/1.1 403 Forbidden

訪問者には 403 としか分かりません。エラーログには理由が出ています。

ターミナル

tail -1 /var/log/nginx/mysite-error.log
# 2026/08/08 12:00:00 [error] 412#412: *1 open() "/var/www/mysite/secret.html" failed (13: Permission denied), client: 127.0.0.1, ...

開こうとしたファイルの絶対パスと、失敗の理由が書かれています。この絶対パスがとても効きます。設定を読み違えて別の場所を見に行っていた、という間違いは、ここを見た瞬間に分かります。3章の alias と root の取り違えも、このログで一発です。

4章で nginx の worker が www-data で動いていることを見ました。Permission denied は、その www-data から読めない、という意味です。読み手が誰なのかを知っていると、ログの一行が具体的に読めます。

見るべき場所を決めておく

困ったときに見る順番を決めておくと、慌てずに済みます。

  1. curl -sI でステータスコードを見る。何が起きたかを掴む
  2. エラーログの末尾を読む。なぜ起きたかを掴む
  3. 必要なら journalctl -u nginx を見る。nginx 自体が起動できたかを掴む

2章で見た journalctl は、nginx が立ち上がる前後の話を持っています。設定を書き間違えて起動に失敗した場合は、エラーログではなくこちらに出ます。どちらを見るかは、nginx が動いているかどうかで決まります。

手を動かす

サイト専用のエラーログを出すようにして、わざと読めないファイルを作り、その理由がログに残ることを確かめます。

ヒント

Permission denied は、worker を動かしている www-data から読めない、という意味です

nginx 自体が起動できない場合は、エラーログではなく journalctl -u nginx を見ます

  • 1. 443 番の server ブロックに error_log の行を足す。水準は warn にする
  • 2. nginx -t のあと systemctl reload nginx で反映する
  • 3. curl で存在しないページを叩いて 404 を起こす
  • 4. echo test > /var/www/mysite/secret.html でファイルを作り、chmod 000 で読めない権限にする
  • 5. curl でそこへリクエストして 403 を起こす
  • 6. tail -1 でエラーログの行を /root/error-reason.txt に保存する

Linux は使うときに起動します(初回は約102MB通信します)

9 項目で採点します