[502 Bad Gateway 解決法] AWS EC2 ロードバランサーを用いて

エラーメッセージにはいろんな種類があります。 おなじみの404や403から、全く見たことのない文字列まで出てきます。 そのなかでも今回は、「502 bad Gateway」 について見ていきましょう。

まず、エラーメッセージは大抵一番前の数字とともにカテゴライズされています。 つまり、502番のエラーメッセージは500番代のカテゴリーに含まれています。 その500番代のメッセージ内容は http/https プロトコルでサーバーに接続しようとしたさい、サーバー側に問題が発生してリクエストに応答できない状態を表示しています。 では、具体的な502番の問題はなんでしょうか。 502に続く文字列を見ると「Bad Gateway」となっています。ので、これはゲートウェイに問題があるということでしょう。 ここでのゲートウェイは情報が通る扉です。例えば、情報源であるサーバー 、サーバーとクライアントを中継するDNSやルーター、サーバーを守る壁であるファイアウォールがあります。 したがって、502エラーメッセージが出たということは、上記のいずれかに問題があるということです。

ここまでみると調べるとろこが多すぎて無理ーと泣くかもしれません。なので、少しでもこの記事が役に立ちますよう、私はどう解決したかを書いていきます。

私はAWSからEC2よりインスタントを作って、AWS Certificate ManagerからSSL証明書を発行して、ロードバランサーを作成し、Router53よりドメイン登録まで終わらせました。 そして、登録したドメインに接続してみると。。。

私の場合、なにが問題なんでしょう? いろいろ調べた結果、ロードバランサーで変なところが見えました。

ロードバランサーのターゲットになっているtest1TGを詳しくみると

ターゲットになっているインスタンスの状態がunhealthyでした。

たぶん、これが問題なんでしょう。 では、どう直せばいいでしょうか。

今ロードバランサーを見ますと、

  • リスナー80ポート → ターゲットtest1の80ポート → ターゲットtest1の443ポート(リダイレクト)

  • リスナー443ポート → ターゲットtest1の443ポート

になっていると思われます。 ここで、以下のようにまずしてみましょう。

まず、次のような新しいターゲットtest1TG2を作ります。

次に、以下のように設定します。

  • リスナー80ポート → ターゲットtest1TGの80ポート → ターゲットtest1TG2の443ポート(リダイレクト)

  • リスナー443ポート → ターゲットtest1TG2の443ポート

そしてドメイン先に接続すると、

成功的にウェブサイトが開けました。