How fastcgi temp works?

Hello everybody,
We are using nginx with php-fpm. Our application works as download
aggregator. We download files from 3rd party servers and send it to
client
while it’s still being downloaded. It means that we can’t use
X-Accel-Redirect, since file isn’t fully downloaded and X-Accel-Redirect
sets Content-Length to actual file size. We set required headers in php
and
in cycle read chunks of file, prints it and flush it to output.
Everything
seems to work fine except large files (over 1GB) on slow download
speeds.
Downloading was interrupted at 1GB - it seemed like client has
disconnected

  • calling connection_aborted in php returned true. I have found out that
    fastcgi_max_temp_file_size is 1GB by default - so I have increased it to
    2GB.
    Now how exactly does fastcgi temp file works? Does every request has its
    own
    temp file? Or is there one common temp file?
    Thanks for hints!

Posted at Nginx Forum:

Hello!

On Thu, Jan 30, 2014 at 12:44:25PM -0500, portoist wrote:

fastcgi_max_temp_file_size is 1GB by default - so I have increased it to
2GB.
Now how exactly does fastcgi temp file works? Does every request has its own
temp file? Or is there one common temp file?
Thanks for hints!

Some hints can be found here:

http://nginx.org/r/fastcgi_buffering

Downloading is not interrupted by nginx after reaching 1GB, but
it will stop loading further data from a backend till already
buffered data are sent. This may take a while if client
connection is slow, leading to timeouts on backend’s side.


Maxim D.
http://nginx.org/

Thank you for your answer. I will try how it will work with
X-Accel-Buffering: no in headers.
It is strange. From backend it seems like client disconnects. Calling
php
connection_aborted returns true. I am downloading file around 1.5GB with
speed around 250KB/s. I have downloaded 600MB and I can see in my log
from
php, that I have disconnected. Also I know that file from 3rd party
server
is fully donwloaded - so there are data to send and that script uploaded
1GB. But my download is still running. When I download 1GB downloading
stops.

Posted at Nginx Forum: