I have a rather large and slow (complex data, complex frontend) web application build in RoR and served by Puma with nginx as reverse proxy. Looking at the nginx error log I see quite a few entries like:
2014/04/08 09:46:08 [warn] 20058#0: *819237 an upstream response is buffered to a temporary file /var/lib/nginx/proxy/8/47/0000038478 while reading upstream, client: 220.127.116.11, server: engagement-console.foo.it, request: "GET /elements/pending?customer_id=2&page=2 HTTP/1.0", upstream: "http://unix:///home/deployer/apps/conversationflow/shared/sockets/puma.sock:/elements/pending?customer_id=2&page=2", host: "ec.reputationmonitor.it", referrer: "http://ec.foo.it/elements/pending?customer_id=2&page=3"
I find it rather curious as it's very unlikely that that page remains the same for different users and different user interactions, and I would not think that buffering the response on disk necessary/useful.
I know about proxy_max_temp_file_size and setting it to 0, but it seems to me I little bit awkward to me (my proxy tries to buffer but has no file where to buffer to... how can that be faster?).
My questions are:
1) How can I remove the [warn] and avoid buffering responses? Is it better to turn off proxy_buffering or set proxy_max_temp_file_size to 0? Why?
2) If nginx buffers a response when does it serve the buffered response, to whom and why?
3) Why nginx turns proxy_buffering on by default and then [warn]s you if it actually buffers a response?
4) When does a response triggers that option? When it takes > than some seconds (how many?) to serve the response? Is this configurable?