Timeout 504 の原因はNGINXだけでなくELBのせいだった

投稿日: 2022/12/15
更新日: 2022/12/15
シェア:

URL copied!


概要

大量のファイルを処理する機能を作ったらシステム側からのレスポンスが帰る前にTimeoutしてしまった。(処理は完了していた。)

NGINX の設定

私の場合はサーバー側での処理が重く、レスポンスが遅くなっていたのが原因なので下記を変更。

proxy_read_timeout 300;  # default: 60

http, server, location で設定できる。

全体に適用するのではなく、どうしても処理が重くなってしまうリクエストのURLのみで緩和するように(location 内で変更する)。

ELB の設定

NGINX の設定を変えてもまだ60sでタイムアウトしてしまっていた。エラー画面を見ると NGINX が出しているエラーとは変わっていた。
よくよく調べてみるとELBでも同じような設定がなされていた。

Idle timeout の変更

※2022/12現在の遷移です。コンソール画面や文言がたまに変わるので注意してください

コンソール>EC2 > Load balancers

で対象のロードバランサーを選択し詳細画面へ

Attributes のなかに Idle timeout が存在する。これを Edit ボタンがあるので押下して NGINX 側で指定した時間と同じに設定する。

解決

私の場合は上記で解決できました。ELBは全リクエストの Idle timeout が伸びてしまうので NGINX 側で切ってあげるようにしましょう。