2017年5月18日

Node, express, nginx で動くWebサイトへのファイルアップロードでサイズ超過エラーが出る時の対策

Node/Express.js で作ったWebアプリケーションをテストしていて、CSVファイルのアップロード時に一定のファイルサイズを超えると「413 Request Entity Too Large」というエラーになる事に気付きました。


調べた結果、

  1. ExpressのbodyParserミドルウェア
  2. MultiPartフォームデータの処理を簡単にしてくれるミドルウェアのMulter
  3. そしてリバースプロキシとして使っているNginx 

の3箇所で許可するファイルサイズの最大値を設定する必要があることが分かりました。


1. Expressの設定


app.use(bodyParser.json({ limit: '20mb' }));
app.use(bodyParser.urlencoded({ extended: true, limit: '20mb' }));


2. Multerの設定


const upload = multer({
  limits: {
    fileSize: 1024 * 1024 * 20, // 最大20MBまで許可
  }
});



3. Nginxの設定


location / {
proxy_pass http://127.0.0.1:3000;
... (略) ...
client_max_body_size 20M;
}


最初1と2の設定を付けたのに上手く行かなくて、3の設定が必要な事に気付くまでに時間がかかってしまったので、メモしておきます。