ノウハウ

【nginx】413 Request Entity Too Largeの対処法

こんにちは、「マサとフミ」のフミです。

先日、こんなことがありました。

フミ
フミ

web画面からのリクエストがエラーになるんですが。
アプリケーションサーバにはエラーは出てません。

アプリケーションサーバにエラー出てないのであれば、Webサーバには?

マサ
マサ
フミ
フミ

413 Request Entity Too Largeと出てました!

フミ
フミ

(このエラーはどうやったら発生しなくなるんだろう)

nginxで発生した「413 Request Entity Too Large」について、発生する原因と対処法を説明します。

nginxの「413 Request Entity Too Large」の対処法

非常に簡単です。ステップを踏んで説明していきます。

ステップは次の通り

  • STEP1:413 Request Entity Too Largeが出る原因
  • STEP2:413 Request Entity Too Largeの対応方法
  • STEP3:実際の設定内容

STEP1:413 Request Entity Too Largeが出る原因

413 Request Entity Too Largeはnginx(Webサーバ)に送信したデータサイズが大きく、制限を超えていた場合に発生します。

413 Request Entity Too Large が発生するイメージ

HTTPステータスコード413の詳細は以下になります。
https://tools.ietf.org/html/rfc7231#section-6.5.11

STEP2:413 Request Entity Too Largeの対応方法

大きく二つの対応方法が考えられます。

  1. nginxの受け付けられるデータサイズ上限を変更する
  2. アプリケーションの実装を変え、上限値に収まるようにデータ送信する

nginxの設定を変更できないような環境で開発していたり、送信できるデータ上限を増やすことにセキュリティ、性能的な懸念がある場合は、2の方向で対応を検討する必要があります。
その場合は、少ないデータ送信をさせるような画面遷移に変更したり、一回で送信できるデータの上限をクライアント側で制限したり、より効率的にデータ送信できるようなロジックにしたり、対応方法はその都度検討する必要があります。

今回は、1のnginxの受け付けられるデータサイズ上限の変更方法をSTEP3でご紹介します。

STEP3:実際の設定内容

nginxの設定は「nginx.conf」という設定ファイルに記述します。
データサイズの上限を変更するためには「client_max_body_size」を設定します。
(※デフォルト設定の場合は何も記載されていない状態です。)

ファイルには以下の7行目のように設定します。今回の例だと、10MBまで上限を増やしています。

server {
  listen 80;
  include /etc/nginx/mime.types;

  location /外部からのアクセスパス/ {
    proxy_pass  http://IPアドレス:ポート番号/フォワードするApplicationContext/;
    client_max_body_size 10M;
  }
}

また、以下の4行目の箇所に記載すると全てのlocationに記載されているアプリケーションに設定内容が反映されます。

server {
  listen 80;
  include /etc/nginx/mime.types;
  client_max_body_size 10M;

  location /外部からのアクセスパス1/ {
    proxy_pass  http://IPアドレス1:ポート番号1/フォワードするApplicationContext1/;
  }
  location /外部からのアクセスパス2/ {
    proxy_pass  http://IPアドレス2:ポート番号2/フォワードするApplicationContext2/;
  }
}

nginx.confに設定後、どのように設定内容を反映させるかは使用している環境(オンプレ、docker、cloud等)によって異なるので、反映方法は別途確認しましょう。

状況に合わせて検討しよう

STEP2にも簡単に記載しましたが、対応方法は1つではありません。

データ送信できる上限値を上げると、その分、セキュリティリスクが高まったり、通信容量が増えるためクライアント側への応答時間が長くなったりします。

応答時間が長くなる場合、他の設定値も見直す必要があるかもしれません。よく検討し、適切な値を設定し、やりたいことが実現できるようにしましょう!

-ノウハウ

© 2021 プロITエンジニア道