在Apache / Nginx设置中刷新输出缓冲区

我想要让我正在开发的网页的页面内容在下载时出现在屏幕上。 在我的testing/开发环境中,按照预期使用PHP flush()命令。

但是,我的生产设置(WPEngine)在Apache前使用Nginx代理,并且flush()不再工作(也不执行任何其他输出缓冲命令)。 当我想通过发送4k空白字符进行刷新时,我已经能够通过故意填充缓冲区来获得所需的行为。

然而,这感觉像一个黑客和页面有问题需要冲洗100次以上,所以这相当数量的下载总数据。

有没有一种方法通过发送控制字符和/或设置HTTP标头来向Nginx发送刷新缓冲区(或根本不缓冲)的方式,以避免发送不必要的空白字符?

由于WPEngine是托pipe托pipe环境,我无法对服务器设置进行任何更改。 所以,例如,通过向nginx服务器configuration添加指令来closuresNginx缓冲不是一个选项。

我现在这样做的方式如下:

<?php //turn off server content compression for this page header('Content-Encoding: none;'); //turn off PHP output buffering ob_end_flush(); //make padding to fill buffer $buffer = str_repeat(" ", 4096*8); $start = time(); do { printf( 'Time: %s secs<br>', time() - $start ); echo $buffer; sleep(1); } while( (time() - $start) < 10 ); ?> 

    您应该关闭nginx中的缓冲:

     proxy_buffering off; 

    参考: http : //nginx.org/r/proxy_buffering

    虽然已经有了一个可以接受的答案,但有一点是正确的,值得注意的是,如果你使用的是php-fpm, fastcgi_buffering也是一个问题。

    文档不清楚,但发出X-Accel-Buffering: no响应中X-Accel-Buffering: no标题将禁用fastcgi_buffering仅在> = nginx 1.5.6 。 头似乎影响proxy_bufferingfastcgi_buffering ,这是从文档不清楚 。

    由于大多数发行版仍在运行nginx 1.4系列,而且很多人都在使用php-fpm,所以这是一个潜在的跳闸点(也就是挂了一个小时)。

    这可能是一个nginx问题,在正在缓冲的位置使用它

     fastcgi_keep_conn on; 

    如果你需要知道你需要把它放在哪里,然后分享你的nginx配置文件。