読者です 読者をやめる 読者になる 読者になる

下級エンジニアの綴

新しく発見したことを綴っていこうと思っています。夢はでっかく上級エンジニアになることです。

nginxのアップロードモジュールを使ってみた

大容量のファイルを扱うことがあったので、どうしようかなと調べているとnginxに便利なモジュールがあったので紹介します!!

入れてみて感じたメリット

細かいことはあまりわかっていませんが、1Gのメモリしか積んでいないマシンに1.5Gほどのファイルをアップロード出来たのでめっちゃ感動しました!!

インストール

mkdir /usr/local/src/nginx
mkdir /usr/local/src/nginx-upload-module/
git clone https://github.com/nginx/nginx.git usr/local/src/nginx
git clone -b 2.2 /usr/local/src/nginx-upload-module /usr/local/src/nginx-upload-module/
cd /usr/local/src/nginx
configure auto/configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf
make -j4
make install

大体こんな感じで導入できます(細かい設定は各々やってください(nginxのコマンドを作ったり等))

設定ファイル

location {{ item.path }} {
  upload_pass @rails;

  proxy_connect_timeout 500;
  proxy_send_timeout    500;
  proxy_read_timeout    500;

  client_max_body_size 2G;

  upload_pass_form_field ".*";
  upload_store /tmp/;
  upload_store_access user:rw group:rw all:rw;
  upload_resumable on;
  upload_set_form_field "$upload_field_name[filename]"   "$upload_file_name";
  upload_set_form_field "$upload_field_name[type]"       "$upload_content_type";
  upload_set_form_field "$upload_field_name[path]"   "$upload_tmp_path";
  upload_aggregate_form_field "$upload_field_name[md5]"  "$upload_file_md5";
  upload_aggregate_form_field "$upload_field_name[size]" "$upload_file_size";
  upload_max_file_size 2G;
}

導入時詰まったところ

アップロードモジュールのmasterは新しいnginxには対応してないみたいです。(全てのバージョンで確認はしていないので実際わかってないです。) 自分が入れたnginx/1.9.13では動かなかったです。しかしプルリクの2.2(アップロードモジュール)は動くみたいだったのでそれを使用すると上手く入れれました。

最後に

アップロードモジュールも結構古いので、将来的には動かなくなる可能性も高いので導入は自己責任でお願い致します。 個人的にはLuaとか使ってアップロードモジュールみたいなのを作るのが安定なのかなと思っています。(好みですが)