How to disable output buffering with PHP and nginx

Maxim Dounin mdounin at mdounin.ru
Tue Oct 8 15:48:51 UTC 2013


Hello!

On Mon, Oct 07, 2013 at 10:57:14PM -0400, B.R. wrote:

[...]

> I then noticed on the capture that PHP was rightfully sending the content
> in 2 parts as expected but somehow nginx was still waiting for the last
> parto to arrive before sending content to the client.

What makes you think that nginx was waiting for the last part 
without sending data to the client?

Please note that checking by a browser as in your check list isn't 
something meaningful as browsers may (and likely will) wait for a 
complete response from a server.  In my limited testing on 
Windows, IE needs a complete response, while Chrome shows data on 
arrival.

Just in case, it works fine here with the following minimal 
config:

    events {}
    http {
        server {
            listen 8080;
            location / {
                fastcgi_pass backend:9000;
                fastcgi_param SCRIPT_FILENAME /path/to/flush.php;
                fastcgi_keep_conn on;
            }
        }
    }

But, again, testing with fastcgi_keep_conn is mostly useless now, 
it's an abuse of the unrelated directive.  The fastcgi_buffering 
directive is already here in 1.5.6, use

    fastcgi_buffering off;

instead if you need to turn off buffering for fastcgi responses.  
Just in case, documentation can be found here:

http://nginx.org/r/fastcgi_buffering

-- 
Maxim Dounin
http://nginx.org/en/donation.html



More information about the nginx mailing list