504 Gateway Time-out が出たので ALB の アイドルタイムアウト 設定変更する

ALBを導入したらブラウザ上で504 Gateway Time-outエラーが出るようになった

解決のためにまず確認したのは、

  1. ALBのCloudWatchモニタリング
  2. Apacheのアクセスログ
  3. PHPサイトのアプリケーションログ

どのログを見ても、エラーが増えたりはしていない。

Webサーバーまで到達できていないことを考えると、これはApacheやアプリケーションが原因ではない。
おそらくロードバランサーで何かおきてるんだろうとあたりをつけて、ALBの仕様を確認する。

ALBのドキュメントを確認すると、

HTTP 504: Gateway Timeout

考えられる原因:

  • ロードバランサーは、接続タイムアウトが期限切れになる (10 秒) 前にターゲットへの接続の確立に失敗した。
  • ロードバランサーはターゲットへの接続を確立したが、アイドルタイムアウト期間が経過する前にターゲットが応答しなかった。
  • サブネットのネットワーク ACL で、ターゲットから一時ポート (1024-65535) のロードバランサーノードへのトラフィックが許可されなかった。
  • ターゲットがエンティティ本文より大きな Content-Length ヘッダーを返した。ロードバランサーが欠落しているバイトを待機してタイムアウトした。

なるほど、ALBのタイムアウト設定が短すぎると、Webサーバーからのレスポンスを待ちきれずにエラーが発生したのか。

ALBの設定画面でアイドルタイムアウトの秒数を確認した

  • AWS管理コンソール > EC2 > ロードバランサー
  • 対象のロードバランサーを選択

2018-04-02_13h25_37.png

  • 「説明」タブを選択
  • 属性 > アイドルタイムアウト の項目を確認

    • 60秒 と設定があった
  • 設定値を伸ばして更新する

    • アイドルタイムアウトの範囲は 1 ~ 3,600 秒です。

無事、504 Gateway Time-outエラーが出なくなりました!

参考

504 Gateway Time-out が出た際は Elastic Load Balancing の設定にも注意しよう

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.