Nginxのエラーログ「client request body is buffered to a temporary file」対策・設定方法まとめ(ワードプレス)
Nginxでの定番のエラーログ
「client request body is buffered to a temporary file 」
の対応方法を調査しました。
これでもう悩まされることはないはず。
このエラーログです
2018/10/27 18:51:59 [warn] 6610#6610: *1078199 a client request body is buffered to a temporary file /var/cache/nginx/client_temp/0000000045, client: xxx.xx.xxx.xx, server: parudou3.com, request: "POST /wp-admin/async-upload.php HTTP/1.0", host: "parudou3.com", referrer: "https://parudou3.com/wp-admin/upload.php"
おそらく、Nginxを始めた人は誰もが目にするエラーログ。
初期設定でワードプレスを使うと必ずこうなります。
このエラーコードの意味
アップロードしたファイル等に使ったバッファが、
設定しているバッファのサイズを超えたよ!という意味。
サーバー上の一時保管場所に入らなかったものと考えればOKです。
入らなかった分は別のファイルに入れたので動作的には完了するのですが、
速度が落ちてしまいます。
ワードプレスの場合、アップロードするのはほぼ管理人だけなので、全く問題ないエラーです。
しかし、やはりエラーログが多いと嫌なもの。無くそう。
対策方法
Nginxのconfファイルの次の値を変更します。
(自分の場合は「/etc/nginx/nginx.conf」)
#デフォルト(記載は無い)
client_body_buffer_size 16k;
↓
client_body_buffer_size 2m;
2MBにすれば、約2500KBまでのアップロードに対応できます(検証済)。
おおよそアップロードサイズの80%にすれば良い。
自分の場合、大きくても2MBなのでこう設定しました。
デフォルトでは16K(32ビット環境では8K)です。
この場合、テキストデータくらいしか対応できません。
記事の保存やコメント投稿もアップロードとなるので、本当にそれくらい。
このメモリはアップロードする時だけ使用されます。
画像アップロードで2MB、記事保存で2MB、といった感じ。
投稿型サイトだとこれでメモリが大量消費されますが、個人ワードプレスなら問題ない。
こんな程度なので、エラーログさえ気にならないのであれば、
デフォルト値の16Kでも問題無いです。
まとめ
無視しても良いエラーですが、
気になるなら上限アップロードサイズの80%の値に設定する。
これにてエラーは発生しなくなります。
この機能はアップロードをスムーズにするためにあるので、
本当に管理人だけならどうでもいいものです。
万一、何かでアップロードが大量にあった場合サーバーダウンしてしまうので、
リスクを下げるのであればデフォルト値の方が良いかと思います。
自分はエラーログが嫌なので2Mにする。
アップロード系はアクセスログを見る限り、管理人しかアクセスしていない。
しかしプラグインなどによって違うと思いますので、一応アクセスログを確認してみてください。
access.log・error.logはパソコンにダウンロードして見るのが良いです。
追記
「client_body_buffer_size」は、
「http・server・location」コンテキストにて設定できます。
そのため、「wp-admin」など、必要なlocationだけに「2M」と設定するとより安心。
投稿型サイトなどはこの調整が必須だと思います。