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
これで大容量のファイルをアップロードできる。