nginxからWebブラウザへのファイル送信が途中で中断してしまう問題 → 解決

Railsアプリはもっぱらnginx + Unicornで動かしているkadoppeです。

今日、現在製作中のRailsアプリの動作検証中に、nginx + UnicornのサーバからWebブラウザへのファイル送信が途中で中断してしまう、という問題が発生してしまいました。

結果的に無事解決したのですが、その時の解決までの流れをメモしておきたいと思います。

解決までの流れ

まず、何度かWebブラウザをリロードしてみたところ、きちんとファイル全体が送られてくる時もあることがわかりました。確率的には50%成功:50%失敗くらい。

次にサーバにログインし、Railsアプリのログファイルを確認。しかしログファイルにはエラー関連の記述なし。

一旦Unicornを終了して、assets:precompileを実行してから、Unicornを再起動。しかし問題は発生したまま。

多分nginxの問題だとあたりを付けて、nginxのエラーログを確認したところ、以下のような記述を発見しました。

どうやら、nginxの実行ユーザが「/var/lib/nginx/tmp/proxy」以下のディレクトリに対する読み込み権限を持っていないみたい。

変えた心当たりはないので「おかしいなー」と思いながら、該当ディレクトリの所有者を確認したところ、見事に所有者がnginxの実行ユーザとは別のユーザになっていました。

実はこの「別のユーザ」、少し前まではnginxの実行ユーザだったんです。ついこの間 nginx.conf を編集してnginxの実行ユーザを変更したところだったのでした。

設置ファイルの修正により実行ユーザが変わっても、「/var/lib/nginx/tmp/proxy」ディレクトリの所有者は変わっていなかったのでエラーが発生していたわけですね。納得です。

「/var/lib/nginx/tmp/proxy」ディレクトリの所有者をnginxの実行ユーザに変更して、nginxを再起動したところ、ファイル送信が途中で中断してしまう問題は発生しなくなりました。

めでたしめでたし。

まとめ

あまりうまくまとまっていませんが、こういうトラブルに対応したときのメモは後々絶対に役に立つので、ブログにまとめてみました。

あわよくば、僕以外の誰かの役にも立つことを祈って。

それでは。

  • moss

    おかげさまで解決しました。感謝します。

  • matsu

    nginx + php-fpmの場合に、Chromeのconsoleに、「net::ERR_INCOMPLETE_CHUNKED_ENCODING」と出て、容量の大きいコンテンツが途中で切れる問題が発生していました。

    まさに原因はこれでした!まさかnginx側でエラーが出ているとは。。。