Laravel + AWS Elastic Beanstalkの環境で画像ファイルアップロード機能を実装した際に、サイズの大きいファイルを指定してアップロードすると413 Payload Too Largeのページでエラーになったので、その時の対処方法をご紹介します。
大きく分けて2つ、PHPの設定(php.iniの拡張)とnginxの設定をする必要があります。今回は100MBまでアップロード可能になるように設定してみましょう。
php.iniの拡張
AWS Elastic Beanstalk設定ファイル(.ebextensions)を追加することで、デプロイ時に様々な処理を登録することができます。設定ファイルの形式はYAMLまたはJSON形式で設定でき、今回はYAML形式を使用します。
まず、Laravelプロジェクトのルートに.ebextensionsフォルダを作り、その中にコンフィグファイルを作成します(今回はchange-upload-size.configとします。)。そしてコンフィグファイルに下記のように記述します。
files:
"/etc/php.d/99uploadsize.ini":
mode: "000644"
owner: root
group: root
content: |
upload_max_filesize = 100M
post_max_size = 100M
filesブロックを使うことで2行目に記述してあるパスにファイルを作成します。そしてその後のmode, owner, groupはファイルの権限の設定。contentにファイルの中身を記述しており、upload_max_filesize, post_max_sizeをそれぞれ100Mに設定しています。
nginxの設定
nginxの設定ファイルは.platform/nginx/conf.d/elasticbeanstalkフォルダに配置します。(最初、php.iniと同じように.ebextensionsとfilesブロックでnginxの設定ファイルを作成するように記述していたのですがうまくはんえいされなかったです。)
上記のフォルダにclient_max_body_size.confを作成し、次のように記述します。
client_max_body_size 100M;
これによりnginxで100Mまでのリクエストを受け入れられるようになります。
まとめ
以上の設定ファイルを配置後Elastic Beanstalkにデプロイするとphp,nginxそれぞれの設定が反映されます。.ebextensionsで全部やろうとしてしばらくハマっていたので、参考になれば嬉しいです!