nginx のアップロードサイズ制限

メモ:

Knowledge というオープンソースのソフトウェアを使用しているのですが、その中でファイルをアップロードしたところ「アップロードに失敗しました」とメッセージが表示されアップロードできませんでした。

原因を調べたところ nginx のデフォルトが 1M までということが分かり、 client_max_body_size を適切に設定することで対応することができました。

Knowledge は次の環境で運用しています。

  • nginx
  • tomcat

サーバで取り扱うサイズの変更

http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size によると、 nginx ではデフォルトで1MBまでのデータしか受け付けない設定になっています。

nginx が1MBより大きなデータを扱えるようにするには、 conf ファイルに client_max_body_size ディレクティブを設定します。

server {
    listen       80;
    server_name  localhost;

    client_max_body_size 10M;

    location / {
        root   /var/www/html;
        index  index.html index.htm;
    }

    location /knowledge/ {
        proxy_pass http://localhost:8080/knowledge/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }
    ・・・・・
}

今回は、 Knowledge というアプリケーション上で発生したエラーでしたが、「413 Request Entity Too Large」などのエラーが発生することもあります。