2013年8月17日星期六

Nginx keepailve 不支持gzip on 下的 php ob_flush

原本是gzip 和keepalive 都开启的nginx ,今天 coder 新需求,测试的时候发现 keepailve 不生效,php 代码如下:
<?php
/**
* 程序入口
*/

for($i = 0 ;$i < 4 ; $i ++){
        echo str_repeat(" ", 4096);
                            $str = time() . ' --' . $i .'</br>';
                            echo $str; 
                            ob_flush();
                            flush();
                            sleep(2);       
}
ob_end_flush();
exit;

?>


        程序应该是2秒在页面输出一行,可是在我的服务器上是跑完了整个输出来的。纠结了半天,由于扯到正式
环境,所以又重新部署了一个测试环境,将配置 COPY 过去测试,发现 gzip 加进到nginx 配置后,输出就不正常
了。后面查了一下,用到php 这个函数的,生效做方:
  • In php.ini:
    . output_buffering = Off
    . zlib.output_compression = Off
  • In nginx.conf:
    . gzip off;
    . proxy_buffering off;
        由于gzip 在用,不能关闭,后续继续与coder 讨论折中方法

没有评论:

发表评论