九保すこひ@フリーランスエンジニア|累計300万PVのブログ運営中
最近の流れで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.iniのpost_max_size
- php.iniのupload_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_sizeとupload_max_filesizeの設定です。
数字を以下のように変更してあげましょう。
post_max_size = 10M
upload_max_filesize = 10M
で、忘れちゃいけないのが再起動です。
今度はphp-fpmですね。
sudo systemctl restart php-fpm
はい!これでPHP側も完了です。
あとはpixabayなどで、でかい画像でもダウンロードして、アップロード・テストをしてみてください!お疲れ様でした(^^)
ではでは〜。