502 Bad Gatewayが起きた際に対処した事
苦労してAWSでSSL化したWEBサイトにアクセスしたら502 Bad Gatewayと出てしまう現象が多発したのでどのように解決したかを書きたいと思います~。
ヘルスチェックはHealth checks failed with these codes: [502]と出てる状態です。
まずはAWSのロードバランサーのログを見る
やっぱりなんらかのエラーが出たらまずはログ確認ですよね!
ALBログを参考にしてログを確認する。
ん~特に問題は無いですね…
EC2のインバウンドルール確認
AWSのメニューからEC2>インスタンス>セキュリティタブ>セキュリティグループ>インバウンドルール
EC2のHTTP、HTTPSのポートを全IPに対して開放してる状態ですが、HTTPに関しては最終的にはALBから通ればいいので、80番ポートだけで充分なようだ。
というかそもそも、僕の場合EC2側でHTTPSを使っていないので許可を外しました。
しかし、依然として502エラーがでてしまう。
結論
結論から言うと、どうやらターゲットグループの設定が誤っていました。
ターゲットグループに設定したインスタンスが/でリクエストを受け付けているかどうか確認すべきでした。
本来はnginxのログとLaravelのログを確認するのですが、今回のエラーの原因はそこよりも前らしい。
ロードバランサーがリッスンするポートは外部からリクエストを受け付けるポートで、僕の場合nginxで80番ポートをリッスンしているのに、ターゲットグループのポートを443にしています。
EC2側で443ポートをリッスンしていないのにEC2の443ポートにリクエストを送ったら当然エラーになるよなぁ?
そこでポートをHTTP:80 にして合わせることで502エラーが解消しました。
ちなみに、「EC2インスタンス側でHTTPSの設定を」と書いている記事がありますが、そうしなければいけない明確な理由がないので基本的には必要ありません。
HTTPS化をしたいのであればACMを使ってALBに証明書を設定すれば十分で、ALB→インスタンス間の通信はAWS内部の通信なので、そこに関しては基本的にHTTPで問題ありません。
AWSの理解がまだまだ浅かったのでこれからもっと勉強したいと思います。
ではでは~
Discussion