問題の切り分け
wordpressにてメディアをアップロードしようとした場合にHTTPエラーが発生する場合はまず、100KByte程度の画像をアップロードし正常にアップロードできるか確認します。
アップロードに失敗する場合
アップロード先フォルダの存在や権限を確認します。
確認対象:
[wpインストール先]/wp-content/uploads
所有者及びグループがnginxの動作ユーザとなっていること。
所有者に書き込み権限がついていることを確認します。
※ SELinuxが有効な場合はwebサーバから書き込みを許可するためのラベル付けを行います。
chcon -R -t httpd_sys_rw_content_t [wpインストール先]/wp-content/uploads
参考:wordpressインストール時に「wp-config.phpファイルに書き込むことができません」が発生する
アップロードに成功する場合
次に3~5Mbyteの大き目の画像ファイルをアップしてみましょう。ここで失敗する場合はサーバの設定の問題の可能性があります。
phpの設定確認
phpの設定で「post_max_size」、「upload_max_filesize」という項目がありそれぞれ「最大データ送信容量」、「ファイルアップロードファイルの1つあたりの最大容量」になります。この設定値がアップロードしようとしたファイルより小さいとアップロードエラーになります。
phpinfoの画面が参照できればphpinfoで確認できます。
sshのコンソール等からコマンドを発行して確認する方法もあります。
cat /etc/php.ini | grep -e post_max -e upload_max
値がアップロードしたサイズよりも小さい場合はphp.iniの設定を変更します。
/etc/php.ini
;post_max_size = 8M post_max_size = 16M ;upload_max_filesize = 2M upload_max_filesize = 8M
post_max_sizeはアップロードファイルやフォームに入力したデータの合計値なので、post_max_sizeはupload_max_filesizeより大きめに設定しておきます。
設定完了後、php-fpmを再起動します。
systemctl restart php-fpm
nginxの設定確認
nginxのserver設定についてもPOSTサイズの制限が存在しデフォルト値では1MByteが指定されているようですので、この設定値も変更します。
設定は環境に応じて異なると思いますが、デフォルト値は「/etc/nginx/conf.d/default.conf」、バーチャルホストを設定している場合は「/etc/nginx/conf.d/virtual.conf」または独自に作成したファイルが編集対象になると思います。
該当ホストの設定箇所にて「client_max_body_size」の定義を追加します。
server { listen 80; client_max_body_size 16M; ; 略 }
設定値は「post_max_size」と揃えておくとよいと思います。
設定完了後、nginxをリロードします。
systemctl reload nginx