parudou
parudou
parudou
更新日:2018/10/29

Nginxの「proxy_buffer_size」のエラーログ対策・設定方法まとめ(upstream response is buffered to a temporary file)

Nginxをリバースプロキシで使う場合、
「proxy_buffer」系の設定で悩む人が多いだろう。
いったいどんな値が良いのか?

正直、ほとんど理解していませんが、
「#なんか知らないけどエラーは無くなった」レベルで語ります。

このエラーログを対策する

2018/09/30 03:31:06 [warn] 32180#32180: *121312015 an upstream response is buffered to a temporary file /var/cache/nginx/proxy_temp/7/44/0000083447 while reading upstream, client: xxx.xxx.xx.xxx, server: , request: “GET /wp-content/uploads/2018/09/aaa.png HTTP/1.1”, upstream: “http://192.168.0.1:80/wp-content/uploads/2018/09/aaa.png”, host: “parudou3.com”, referrer: “http://parudou3.com/archives/10”

初期設定で使うと必ず出るエラーログです。
記事表示の度に何個も出るので、さすがに無くさないといけない。

どうなったらエラーが出るか

バッファサイズよりも受信したファイルの容量の方が大きい場合、エラーが出る。

例えば、1MBの画像を表示する場合、バッファは約1MB必要です。
これは検証結果からこの結論になりました。
アップロードの場合のバッファもほぼ同じなので、多分合っている。

では、どのように設定するのが良いか?

次のように設定しました。

proxy_buffer_size 32k;
proxy_buffers 50 32k;
proxy_busy_buffers_size 32k;

それぞれ説明します。

proxy_buffer_size

最初に使うバッファサイズです。
記事やCSSなどは20KB程度のサイズなので、「32K」としておいた。
これで画像以外はほぼこのバッファ一つで対応できる。

なんとなく、一つで終わらせる方が速そう。
なお、海外の専門家?の人が言うには「128kも絶対に必要ない」とのこと。
確かにそう思う。

proxy_buffers

上記のバッファで納まらなかった場合に使うバッファです。
「50 32K」は「32Kのバッファを最大50個使う(最大1600K)」という意味。
200KBの画像であれば、6個使う計算です。

これにて1600KBまでは対応できる。
もし3MBの画像を貼付しているのであれば、「100 32k」とします。
こうするとエラーログは確実に出ない。

大きい画像しかないのであれば「25 128k」として、
使うバッファの個数を減らすのが良いと思います。

proxy_busy_buffers_size

…すまない。よくわからない。
ただ、「proxy_buffer_size」の1倍~2倍と書いてあったので、1倍にした。
今のところ、特に問題はない。

対策まとめ

chromeのデベロッパーツールなどで、自分のサイトの各ファイルのサイズを確認。
そのサイズに合わせてプロキシのバッファを調整する。

そのため、人によって設定する値が違ってきます。
ここの部分があるので、どの解説サイトも違った数値です。
できるだけ無駄遣いしない設定にすることが大事。

CSS一つに128KBもバッファ(メモリ)を使ってはいけない。
2MBを超えるような画像を貼ってはいけない。
そんなところでproxy_buffer_sizeを調整していこう。

いつしかサイトの内容も変わると思うので、
やはりaccess.logとerror.logは毎日監視して適宜対応したいところです。

是非ご感想・ご指摘等をください。

プロフィール

管理人:parudou
単なるWEBサイト作成マニアです。
底辺法人アフィリエイター。
Twitterはこちら

日記はパルどうSEOブログ

Copyright (c) parudou All Rights Reserved.