ALB+Apache WEBサーバ(EC2)で502 BadGatewayになる問題


概要

AWSでSSL化したWEBサーバーを立てたかったので作成したところ、『502 Bad Gateway』が表示されてハマったのでその記録。

結論から言うと、Apacheの再起動でOKでした。
(ただし、これが正解かどうかは不明)

環境

AWSにてWEBサーバーの構築。
ドメインをSSL化したかったのでALB-EC2単体の構成にしてます。

  • EC2
  • ALB
  • Route53
  • ACM(AWS Certificate Manage)

EC2上ではApacheを動かしてます。

環境の作成は下記サイトを参照して行いました。

EC2+ACM+ALB+お名前.comで設定をしてサブドメインでhttps接続できるようになるまでひととおり

エラー現象

AWS側の設定も完了して、ブラウザでアクセスするとApacheの画面になった。

よっしゃ!ということで、PHPのソースをアップロードして接続確認してみたところ…

「502 Bad Gateway」

なんでやねん。
確かにALBのログを見ると、ある時点からエラーが上がっている。

ターゲットグループを確認しても確かにunhealthyになっている。

Health checks failed with these codes: [502]

下記画像は別のものですが、unhealthyが表示されていて、「説明」の項目に上記のエラーが表示されていたはずです。
(スクショ忘れたので参考として…)

ALB側の問題か、WEBサーバ上の問題か、わからずにハマってました。。。

Apacheのエラーログに出力があった

サーバー上でApacheを動かしてるわけですが、そもそもここまでアクセスがきていないとダメなわけで。
ログ(/etc/httpd/logs/error_log)を確認したところ、変なエラーが出てるんです。

[core:notice] [pid 3628] AH00052: child pid 3643 exit signal Segmentation fault (11)

もちろん、 /etc/httpd/logs/access_logの方にはなにも出力されていない。

ということは、ALB→WEBサーバーへはアクセスOK。WEBサーバー→ALBへの返却がNGということ。

対応したこと

上記エラーログをググったりしたんですが、有効な解決策は見当たらず。

とりあえずApache再起動するかー

と思ってやってみたところ……アクセスできた!!

Apache再起動コマンド↓↓

service httpd restart

まとめ

ターゲットもhealthyになり、HTTPステータスも200が返答されるようになりました。

WEBサーバにロードバランサー(ALB)をつなぎこむとApacheの再起動が必要なのだろうか?

再起動って大事だね。