AWS EC2+nginx+php アップロードサイズの上限を増やす

AWSのEC2インスタンスにファイルアップロード系アプリをデプロイした時の話。

ローカルでは問題なくアップロードできていたのにサーバ上ではエラーが出ていた。すぐにphp.iniの設定だと思ったが、それだけじゃダメだったのでメモ。

php.iniの設定変更

まずは、php.iniのupload_max_filesizeを変更。

php.iniのデフォルトの場所
/etc/php.ini

  • upload_max_filesize = 2M

デフォルトは2Mなので、必要なサイズに変更する。ついでに以下の箇所も必要に応じて変更する。

  • post_max_size = 8M
  • memory_limit = 128M
  • max_execution_time = 30
  • max_file_uploads = 20

ちなみに上記の数値はデフォルト値。

post_max_size POSTできる最大サイズ。upload_max_filesizeより少し大きめに設定。
memory_limit アップロードとは直接関係ないが、増やしておくのが良さそう。
max_execution_time タイムアウト時間(秒)。ファイルが大きい場合は少し多めに設定したい。
max_file_uploads 同時アップロードファイル数の上限。

nginx.confの編集

レンタルサーバーなどでは、php.iniの設定を変更するだけで結構大きいサイズのファイルもアップロードできるようになるが、今回はこちらの設定も変更する必要があった。

nginx.confのデフォルトの場所
/etc/nginx/nginx.conf

client_max_body_sizeをオーバーライド

デフォルト値はなんと1M。オーバーライドするにはserver{}内に以下の1行を追記する。

server {
    #前後省略
    client_max_body_size 10M;
    #前後省略
}

ちなみに0にすると無制限になる。

サーバーの再起動

php.iniやnginx.confを編集後はサーバーの再起動が必要。

#nginx再起動
sudo systemctl restart nginx

#php-fpm再起動
sudo systemctl restart php-fpm.service