torutkのブログ

ソフトウェア・エンジニアのブログ

Redmineのファイル機能で大きなファイルを扱う際の注意点(Nginx + Unicorn)

Redmineのファイル機能で大きなファイルを扱う際の注意点 - torutkの日記の続編です。

Nginx + UnicornRedmineを動作させているときの、大きなファイルをアップロードする際の対応です。

Nginxが扱うファイルサイズ上限の設定

まず、アップロードするファイルサイズの上限をNginxの設定に追加する必要があります。デフォルトでは2MBが上限らしいので、以下のように上限サイズを指定します。

    client_max_body_size 8192M;

Unicornタイムアウト設定

Unicorn上で動くRails+RedmineがNginxから渡されたファイルを所定の場所(/files)に格納するまでに要する時間が、Unicornタイムアウト値を超えてしまうと、UnicornプロセスがKillされてしまいます。UnicornプロセスがKillされると、NginxがWebブラウザ502 Bad Gatewayを返します。

Unicornのデフォルトのタイムアウトは60秒ですが、数百MB以上の大きさになるとタイムアウトが発生してしまいます。Ruby on Railsのファイルアップロードの処理は遅いようなので、タイムアウトをいくつにするかは悩ましいところですが、思いっきり長めにしておく必要があります。(とりあえず1200秒あたり)

timeout 1200