なべしす

独立系SI企業から完全異業種のベンチャー企業に転職、社内のITインフラを整えるべく颯爽と登場した自称天才プログラマー俺のハートフルブログ

Unicorn+Nginx+Rails タイムアウトの設定方法

やりたいこと

サーバーのデフォルトタイムアウトが60秒に設定されていた。
スクレイピングやバッチサーバーでは60秒以内に完了しないものが多いのでタイムアウトの時間を設定したい。

設定方法

NginxとUnicornタイムアウト値を設定する必要がある。

Unicornタイムアウト値変更(999999999999秒)

$ vi /projects/config/unicorn.rb

 ※「timeout 999999999999」を追加。無制限

Nginxのタイムアウト値変更(3600秒)

$ vi /etc/nginx/conf.d/timeout.conf

(ファイル自体を追加) proxy_connect_timeout 3600; proxy_send_timeout 3600; proxy_read_timeout 3600; send_timeout 3600;

NginxとUnicornの再起動

$ /etc/init.d/nginx restart
$ kill -9 <Unicorn マスタープロセスPID>
$ bundle exec unicorn_rails -c config/unicorn.rb -E development -D

備考

タイムアウトの設定は「Unicorn」「Nginx」の2箇所にあります。

$ grep timeout /projects/log/development_unicorn_error.log | grep killing
E, [2017-06-15T11:30:50.803344 #23658] ERROR — : worker=0 PID:23661 timeout (61s > 60s), killing
E, [2017-06-15T11:36:41.156568 #23658] ERROR — : worker=1 PID:23663 timeout (61s > 60s), killing
E, [2017-06-15T11:43:53.542174 #23658] ERROR — : worker=1 PID:23769 timeout (61s > 60s), killing
E, [2017-06-15T11:45:32.648281 #23658] ERROR — : worker=0 PID:23720 timeout (61s > 60s), killing
E, [2017-06-15T13:36:51.095563 #23658] ERROR — : worker=0 PID:23978 timeout (61s > 60s), killing