リバースプロキシとロードバランサ配下の障害
Pro会員限定上級約40分7レッスン
nginx が web01〜03 に振り分けている構成で、502 と 504 が混ざって出始めました。アクセスログを上流ごとに集計し、error.log の 111 と 110 で「拒否」と「遅すぎる」を読み分け、裏側を直接叩いて確かめます。X-Forwarded-For で本当の利用者を数え、壊れたサーバーを down で切り離します。
対象者: nginx などのリバースプロキシ・ロードバランサの配下で起きる 502 / 504 に対応する方 / 複数台構成の切り分けを身につけたい方
前提知識: TLS② 期限切れ・名前不一致・社内 CA 修了程度(中級「アクセスログで見るネットワーク調査」の awk / sort / uniq -c を使います)
この教材を終えると、できるようになること
- nginx のアクセスログからステータスコードを集計し、エラーの種類と割合をつかめるようになる。
- nginx の log_format から列の意味を読み取り、ステータスコードと upstream_addr の組み合わせで集計して、壊れている上流を特定できるようになる。
- nginx の error.log の (111: Connection refused) と (110: Connection timed out) の意味を説明し、502 と 504 が起きる仕組みを proxy_read_timeout と結びつけて理解する。
- curl -w と -m を使って上流のサーバーを1台ずつ直接確かめ、000 とかかった時間から「拒否」と「タイムアウト」を見分けられるようになる。
- $remote_addr と X-Forwarded-For の違いを説明し、ログから本当の利用者の IP を集計できるようになる。また、XFF を信頼する経路を限る必要性を理解する。
- proxy_next_upstream off の意図を説明し、upstream の server に down を付けて nginx -t → reload で壊れたサーバーを安全に切り離せるようになる。
修了後の姿: プロトコルの中身とネットワーク設計を理解し、複雑な障害の根本原因の特定から再発防止の設計まで任せられるエンジニアへ。
Chapter 1振り分けの裏側を切り分ける
ログを上流ごとに数え、エラーの種類を読み分け、裏側を直接確かめて、壊れたサーバーだけを切り離します。
- ステータスコードを集計する「断続的にエラー」を、割合の分かる数字にする約6分(有料会員限定)
- 上流ごとに集計するlog_format を読んで、どのサーバーで失敗したかを数える約6分(有料会員限定)
- error.log で 502 と 504 を読み分ける111 は「拒否された」、110 は「待ちきれなかった」約6分(有料会員限定)
- 裏側を直接叩いて確かめるnginx を通さずに、各サーバーの 8080 番へ約6分(有料会員限定)
- 本当の利用者を X-Forwarded-For で数えるremote_addr は直前の中継者。利用者は XFF の中にいる約5分(有料会員限定)
- 壊れたサーバーを切り離す(down)原因の調査と並行して、まず利用者への影響を止める約6分(有料会員限定)
Chapter 2確認クイズ
502 と 504 の違い、X-Forwarded-For、上流の切り離しの理解度をチェックします。