AWSでELBのヘルスチェックがうまくいかない時のチェックリスト
プロトコル/ポートはあっているか?
例えばNginxで80リクエストを443へリダイレクト設定している状態で、
80ポートでヘルスチェックを行うと、301ステータスが帰ってくるので、ヘルスチェック失敗となる
NginxはHTTPS対応しているか?
ACMで証明書を発行してELBにアタッチしただけの状態では、EC2上のNginxがその証明書を認識していないので、httpsのヘルスチェックが通らない。
curl -v http://{ターゲットEC2のpublic IP}/
を実行すると失敗する。
しかし、ACMで取得した証明書はEC2へインストールはできないので、オレオレ証明書を使うなど必要。
解決パターンは2つ
(1)EC2にオレオレ証明書をインストールしてsslヘルスチェックを通す。
(2)80番でヘルスチェックを行う。http > httpsのリダイレクトはNginxではなくLB側で行う。
チェックコマンド
ELBのヘルスチェックは、レスポンスのログが残らないので、別のEC2からターゲットインスタンスに対してチェックコマンドを手動実行すればデバッグが容易になる
curl -v http://{ターゲットEC2のpublic IP}/