如何在NGINX for PHP应用程序中禁用输出缓冲

2022-08-30 20:38:14

我们有类似这样的代码:

<?php
    ob_implicit_flush(true);
    ob_end_flush();

    foreach ($arrayOfStrings as $string) {
        echo time_expensive_function($string);
    }
?>

在Apache中,这会在输出时将每个回声发送到浏览器。然而,在nginx / FastCGI中,由于nginx的工作方式(默认情况下),这不起作用。

是否有可能在nginx / FastCGI上进行这项工作,如果是这样,如何?


答案 1

首先php必须正确刷新所有内容:

@ob_end_flush();
@flush();

然后,我找到了两个可行的解决方案:

1) 通过 Nginx 配置:

fastcgi_buffering off;

2) 通过 php 代码中的 HTTP 标头

header('X-Accel-Buffering: no');

答案 2

简单的解决方案:

fastcgi_keep_conn on; # < solution

proxy_buffering off;
gzip off;

推荐