チェックは3ヵ所! 413 Request Entity Too Largeが表示された時の対処法

こんにちは。フリーランス・コンサルタント&エンジニアの 九保すこひ です。

最近の流れでPHP(Laravel)を動かすウェブサーバーはapacheではなくnginx(※えんじんえっくす。ロシア製)を利用するようにしています。

理由としては、

早いから!

これにつきます。過去に読んだ記事では、メモリ使用量がapacheに比べて格段に少なかったんです。もちろん、まだまだシェアでいうとapacheには勝ててないですけど、IEがchromeに侵食されたように、これから徐々に人気が増えていくんじゃないかと考えてます。

ちなみにその人気からか、Laravelのインストール説明にはnginxの設定方法も紹介されているんですね。

なぜなら、

早いから!(2回め・数分ぶり)

実際ウェブサーバーにnginxをご希望のクライアント様も増えてきています。

そして本題

で、本題なんですがこのnginxを使っているウェブサービスで、

413 Request Entity Too Large

というエラーが発生しました。
あるファイルをAjaxを使ってアップロードしようとしてたんですね。

エラー内容は、

nginx「いやいや、アップロードするファイル容量デカすぎなんですけどー!(汗)」

って怒ってるんですね。

そうです。

デフォルトのnginx設定だと、最大アップロードが1MBになっているようで、これを変更しなくちゃいけないんですね。

そして、他のブログではあまり言及されてないですけど、合わせてPHP側でもアップロードの最大容量が設定されているので、そっちも設定しておかなくてはいけません。

つまり、やるべきことはズバリ!以下の3つ

  • nginx・設定ファイルclient_max_body_size(もしあるなら変更、なければ追加)
  • php.inipost_max_size
  • php.iniupload_max_filesize

では、実際にひとつずつ設定方法をみていきましょう。

(ここからは、sshなどでサーバー内部にログインしてからの作業になります。)

client_max_body_sizeを設定する

環境によってnginxがどこにあるかは違いますけど、おおむね、

/etc/nginx/

にあると思うんで、以下のコマンドでピョーン!と移動してください。

cd /etc/nginx/conf.d

そして、*****.conf というファイルがあるかと思うんで、(私の場合はバーチャルホスト化してるんで専用のconfファイルを作ってます)これをviなどで開きましょう。

※全サイトに適用する場合は /etc/nginx/nginx.confに設定してもいいようです。

sudo vi *****.conf

で、以下のようにclient_max_body_sizeを各サーバー設定の中に書き込みましょう。
10mというのは10メガバイト、という意味です。もっと容量を大きくしたい場合は各自変更してくださいね。

server {
  listen 80;
  server_name example.com;
  root /var/www/html/example;
  index index.php index.html;
  client_max_body_size 10m;
  #(....その他の設定は省略してます)
}

ちなみに気をつけないといけないのが、httpsにも対応させてる場合です。
その場合、443番ポート部分にもclient_max_body_sizeを設定しないといけないので注意して下さい。

(この間、ついにchromeがhttp通信だと警告を出すようになったんで、これからはhttps一択なんでしょうけどね)

server {
  listen 443 ssl;
  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/example.com/privkey.pem;
  server_name example.com;
  root /var/www/html/example;
  index index.php index.html;
  client_max_body_size 10m;
  #(....その他の設定は省略してます)
}

はい!これでnginx側の設定は終了です。
以下のコマンドでnginxを再起動しておきましょう。(再起動コマンドはCentOS7用です)

sudo systemctl restart nginx

post_max_size、upload_max_filesizeを設定する

さぁ、次はPHP側の設定です。
変更するのはphp.iniなので、この辺は詳しい人も多いんじゃないでしょうか。

では、php.iniがどこにあるかを以下のコマンドで検索してみましょう。

php -i | grep "php.ini"

これは

「phpのphpinfo()で表示できる内容のphp.iniと書かれてる場所だけ表示してね!」

っていう命令文です。

(ただし、これも環境によっては違う場所のphp.iniが表示される場合もあると思うんで、その時はあきらめて、phpinfo()で確認してください)

で、以下のような表示がでると思います。

Loaded Configuration File => /etc/php.ini

さっそく、さっきみたいにviで開いてみましょう。

sudo vi /etc/php.ini

さぁ、post_max_sizeupload_max_filesizeの設定です。
数字を以下のように変更してあげましょう。

post_max_size = 10M
upload_max_filesize = 10M

で、忘れちゃいけないのが再起動です。
今度はphp-fpmですね。

sudo systemctl restart php-fpm

はい!これでPHP側も完了です。
あとはpixabayなどで、でかい画像でもダウンロードして、アップロード・テストをしてみてください!お疲れ様でした(^^)

ではでは〜。

このエントリーをはてなブックマークに追加       follow us in feedly  
開発のご依頼お待ちしております
開発のご依頼はこちらから: お問い合わせ
どうぞよろしくお願いいたします! by 九保すこひ