開発したアプリなど一覧

Nginx + PHP で 413 Request Entity Too Large と出た場合の対処方法

Nginx を利用した WordPress サイトで少し大きめの画像をアップロードしようとしたところ、「413 Request Entity Too Large」というエラーメッセージが表示されてしまった。これはエラーメッセージを読んで想像が付くと思うが、アップロードしたファイルが大きすぎる際に発生するエラーのようだ。

この問題を解消するには Nginx 及び PHP 両方の設定を見直す必要がある。

Nginx の client_max_body_size を編集する

まずは Nginx から。デフォルトでは最大で 1MByte しか受け付けないようだ。なので以下のように client_max_body_size の値を記述することでより大容量のファイルをアップロードできるようになる。

server {
        listen 443;
        ssl on;
        ssl_certificate     /etc/letsencrypt/live/loumo.jp/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/loumo.jp/privkey.pem;

        root /home/ryomatsu/public_html/loumo.jp;
        server_name loumo.jp www.loumo.jp;

        # 以下の行を追加する。
        # server ブロック内ならどこでもいいと思う。
        client_max_body_size 10M;
        #(以下省略)
}

これで nginx を再起動しよう。

$ sudo nginx -t
$ sudo systemctl restart nginx

PHP の upload_max_filesize を編集する

次に PHP の設定を変更する。PHP では 以下の3種類の設定を確認する必要がある。

  • memory_limit
  • post_max_size
  • upload_max_filesize

上から

  • PHPが使用可能な最大メモリ量
  • POST可能なリクエストの最大サイズ
  • アップロード可能なファイルの最大サイズ

となる。設定する値は必ず memory_limit > post_max_size > upload_max_filesize となるように設定しなければならない。

PHP の設定ファイルは phpinfo() を表示した際の Loaded Configuration File に記述がある。自分の環境では /etc/php/7.2/fpm/php.ini に保存されているのでコレを編集する。

memory_limit = 128M
post_max_size = 20M
upload_max_filesize = 10M

このように設定すれば最大で 10M までのファイルをアップロード可能だ。

修正を行ったら php-fpm を再起動しよう。

$ sudo /etc/init.d/php7.2-fpm restart

これで大容量のファイルをアップロードできる。

Sponsored Link

コメント

タイトルとURLをコピーしました