wordpressでメディアのアップロードに失敗する (nginx編)

    

問題の切り分け

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