概要
Elastic Beanstalkを使用してSpring Bootで作成したアプリケーションに対して大容量ファイルのアップロード時に「client intended to send too large body: 9999999 bytes」というようなエラーメッセージが発生しました。本記事では、このエラーの解決方法について説明します。
対応策
client_max_body_size の設定
Elastic Beanstalkでは、デフォルトでアップロードファイルのサイズ制限があります。この制限を解除するために、プロジェクトの直下に .platform/nginx/conf.d/client_max_body_size.conf ファイルを作成し、その中に以下の設定を追加します。
client_max_body_size 50M;
Nginxの設定確認
Elastic Beanstalk にデプロイし、設定の反映を確認するために次のコマンドを実行します。
$ sudo nginx -T | egrep -i "client_max_body_size"
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# configuration file /etc/nginx/conf.d/client_max_body_size.conf:
client_max_body_size 50M;
Nginxの設定にclient_max_body_sizeが正しく反映されたことを確認します。
Spring Bootの設定変更
さらに、「org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException: The field photo exceeds its maximum permitted size of 1048576 bytes.」というエラーが発生しました。このエラーは、Spring Bootのデフォルトのファイルサイズ制限によるものです。application.propertiesファイルに以下の設定を追加します。
spring.servlet.multipart.max-file-size=50MB
spring.servlet.multipart.max-request-size=50MB
これでSpring Bootアプリケーションで処理できる最大ファイルサイズが設定されます。
まとめ
Elastic Beanstalkでの大容量データ送信エラーを解決するために、NginxとSpring Bootの設定を変更しました。Nginxの設定ファイルに「client_max_body_size」を追加して、データの最大サイズを設定しました。さらに、Spring Bootの設定ファイルにも「multipart.max-file-size」と「multipart.max-request-size」を追加し、アプリケーションで処理できる最大ファイルサイズを設定しました。これにより、大容量データ送信に関連するエラーを解消することができます。
コメント