How to disable output buffering with PHP and nginx

Maxim Dounin mdounin at mdounin.ru
Mon Oct 7 23:18:45 UTC 2013


Hello!

On Mon, Oct 07, 2013 at 03:22:15PM -0400, Ben Johnson wrote:

[...]

> Sorry to bump this topic, but I feel as though I have exhausted the
> available information on this subject.
> 
> I'm pretty much in the same boat as Roger from
> http://stackoverflow.com/questions/4870697/php-flush-that-works-even-in-nginx
> . I have tried all of the suggestions mentioned and still cannot disable
> output buffering in PHP scripts that are called via nginx.
> 
> I have ensured that:
> 
> 1.) output_buffering = "Off" in effective php.ini.
> 
> 2.) zlib.output_compression = "Off" in effective php.ini.
> 
> 3.) implicit_flush = "On" in effective php.ini.
> 
> 4.) "gzip off" in nginx.conf.
> 
> 5.) "fastcgi_keep_conn on" in nginx.conf.
> 
> 6.) "proxy_buffering off" in nginx.conf.

Just a side note: proxy_buffering is unrelated to fastcgi, 
switching if off does nothing as long as you use fastcgi_pass.

> nginx 1.5.2 (Windows)
> PHP 5.4.8 Thread-Safe
> Server API: CGI/FastCGI
> 
> Is there something else that I've overlooked?
> 
> Perhaps there is someone with a few moments free time who would be
> willing to give this a shot on his own system. This seems "pretty
> basic", but is proving to be a real challenge.

There are lots of possible places where data can be buffered for 
various reasons, e.g. postpone_output (see 
http://nginx.org/r/postpone_output).  In your configuration you 
seems to disable gzip filter - but there are other filter which 
may buffer data as well, such as SSI and sub filters, and likely 
many 3rd party modules.

While it should be possible to carefully configure nginx to avoid  
all places where buffering can happen, it should be much easier to 
use

    fastcgi_buffering off;

as available in nginx 1.5.6, see 
http://nginx.org/r/fastcgi_buffering.

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



More information about the nginx mailing list