紙一重の積み重ね

35歳のエンジニアがなれる最高の自分を目指して、学んだことをこつこつ情報発信するブログです。

【AWS ALB+Nginx+Unicorn】504 Gateway Time-outと、upstream timed out (110: Connection timed out)が発生したときの対処法

f:id:yokoyantech:20181108180422p:plain

発生した事象

RailsアプリケーションのCSV取り込み処理で504エラーが発生

環境

  • AWS ALB
  • Nginx
  • Unicorn
  • Rails5.1.1

考えられる原因

  • AWS ALBのアイドルタイムアウトが短い
    • デフォルトは60秒
    • 最大3600秒まで設定可能
  • Nginx、Unicornのタイムアウト時間が短い

対策

  • AWS ALBのタイムアウト時間を設定。
    • Nginxと合わせて、暫定で360秒に設定。
  • Nginxにproxy_read_timeoutを設定
    • proxyサーバからのレスポンスを読み込むためのタイムアウト時間。proxyサーバがこの時間内に何も応答しない場合、接続を閉じる。
    • defaultは60秒。
      • Unicornよりも余裕を持たせて、暫定で360秒に設定。

Module ngx_http_proxy_module

  • Unicornにtimeoutを設定
    • ワーカープロセスのタイムアウト時間。秒で設定する。
    • この時間よりも長くかかるリクエストは、強制終了される。
      • 暫定で300秒に設定。

class Unicorn::Configurator

誤った対策

  • 今回の構成では、Nginxでfastcgi_read_timeoutディレクティブを設定するのは無意味。

参考情報

qiita.com

qiita.com