原因はパーミッションだったけど意外な場所のパーミッションだった話
メディアライブラリから画像をアップロードすると 10KB以下のファイルはできるのに、それ以上のファイルは全て「HTTPエラー」が表示されてしまいました。
「メディアライブラリ HTTPエラー」で検索すると皆さん苦労されているので情報はたくさんあったのですが、どれも自分の事例には当てはまらなかったのでメモしておきます。
環境
- OSX El Capitan
- Nginx 1.8.0
- PHP 5.6.14
- Wordpress 4.3.1
試してみたこと
ファイルサイズが 0byte になっていないか
プラグイン、パーミッション、php.ini
全てのプラグインを無効にし、
wp-content/upload/のパーミッションを確認し、
php.ini でメモリやファイルサイズ上限をあげましたがダメでした。
Nginxのアップロード上限を増やす
Wordpressのメモリ上限を増やす
How to Fix HTTP Error When Uploading Images?
wp-config.php に define('WP_MEMORY_LIMIT', '64MB');
を追加してみましたがダメでした。
意外(?)な場所のパーミッションが原因だった
他の事例をあてにするのは諦めて、素直にNginxのログを見てみることにしました(最初からそうしろ)。
すると下記のようなエラーが検出されていました。
2015/11/16 10:05:54 [crit] 1191#0: *231 open() "/usr/local/var/run/nginx/client_body_temp/0000000027" failed (13: Permission denied), client: 127.0.0.1, server: localhost, request: "POST /xxx/system/wp-admin/async-upload.php HTTP/1.1", host: "localhost:8080", referrer: "http://localhost:8080/xxx/system/wp-admin/upload.php"
問題となるのはここです。
/usr/local/var/run/nginx/client_body_temp/0000000027" failed (13: Permission denied)
Nginxがファイルアップロードを受け入れる時の一時的な保管場所だと思うのですが、ここをパーミッション 777
にしたら問題なくアップ出来るようになりました。
El Capitanで権限関係が厳しくなったらしいですが、その辺が原因でしょうか?